emplace相关内容

如何实现一个具有放置新和就位功能的简单容器?

我需要实现一个容器来容纳大量元素,并且由于某种原因,它必须在没有任何堆分配的情况下工作.另一个要求是,不应以任何方式复制或移动容器元素.它们必须直接构造到容器分配的内存中. 为此,我决定使用 Placement new 并将内存管理完全委托给容器实现(在 drdobbs). 此处提供了一个运行示例.(请注意,使用 new uint8_t[size] 和 std::queue 只是为了保 ..
发布时间:2022-01-24 20:47:22 C/C++开发

为什么 emplace_back 比 push_back 快?

我认为 emplace_back 会是赢家,当做这样的事情时: v.push_back(myClass(arg1, arg2)); 因为 emplace_back 会立即在向量中构造对象,而 push_back 会先构造一个匿名对象,然后将其复制到向量中.如需了解详情,请参阅这个问题. Google 还提供了这个和这个问题. 我决定将它们与一个由整数填充的向量进行比较. 这是 ..
发布时间:2022-01-07 11:31:10 C/C++开发

插入具有没有复制构造函数的对象的向量

我有一个类的拷贝构造函数被显式删除(因为 A 在内部使用指针,我不想陷入浅拷贝陷阱): class A {上市:A(const A&) = 删除;A&运算符=(const A&) = 删除;A(const B& b, const C& c);} 现在我有一个 vector 类型的向量.aVector; 并且我想在其中插入元素 - 所以我使用 emplace_back: aVector.emp ..
发布时间:2021-12-21 13:50:09 C/C++开发

在 C++ 地图中插入 vs emplace vs operator[]

我第一次使用地图,我意识到有很多方法可以插入一个元素.您可以使用 emplace()、operator[] 或 insert(),以及使用 value_type 或 make_pair.虽然有很多关于所有这些的信息和关于特定案例的问题,但我仍然无法理解大局.所以,我的两个问题是: 它们中的每一个相对于其他的有什么优势? 是否需要将 emplace 添加到标准中?没有它,以前有什么是不可 ..
发布时间:2021-12-10 16:28:41 C/C++开发

std::map emplace 不复制值

C++11 std::map 类型有一个 emplace 函数,许多其他容器也是如此. std::map米;std::string val {"你好"};m.emplace(1, val); 此代码如宣传的那样工作,直接替换 std::pair,但它会生成 key 和 val 正在发生. 是否也可以将值类型直接嵌入到地图中?我们能比将调用中的参数移动到 emplace 做得更好 ..
发布时间:2021-12-10 16:10:16 C/C++开发

如何创建 emplace_back 方法?

我正在创建一个自定义的 ArrayList/Vector 类,但在创建 emplace_back 函数时遇到了麻烦.如何创建与 ArrayList 的“value_type 类"的构造函数相同的参数? 解决方案 emplace_back 和类似的函数(std::make_shared 等)不需要知道什么关于他们试图构建的 value_type.这要归功于 C++11 中引入的参数包.> ..
发布时间:2021-11-18 00:46:53 C/C++开发

带有可变参数模板的自定义容器放置

我正在实现一个简单的圆形向量类.我想实现一个 emplace 成员函数,但我收到一个我不明白的错误.对于我做错的事情,这可能是一个简单的修复,但由于我对可变参数模板没有太多经验,我不知道是什么...... 我得到的错误是: main.cpp:在函数“int main()"中:main.cpp:104:50: 错误:没有匹配的函数用于调用 'CircularVector::emplace(i ..
发布时间:2021-09-16 18:59:21 C/C++开发

如何创建 emplace_back 方法?

我正在创建一个自定义的 ArrayList/Vector 类,但在创建 emplace_back 函数时遇到了麻烦.如何创建与 ArrayList 的“value_type 类"的构造函数相同的参数? 解决方案 emplace_back 和类似的函数(std::make_shared 等)不需要知道什么关于 value_type 他们正在尝试构建.这要归功于 C++11 中引入的参数包.> ..
发布时间:2021-08-30 19:14:05 C/C++开发

c ++ 11 operator []是否等效于地图插入?

对于C ++ 11,以下各项之间仍然存在性能差异吗? (以 std :: map> 为例) map [key] = myVector和map.emplace(key,myVector) 我没有弄清楚的部分是operator []的确切内部。到目前为止,我的理解是(当键不存在时): 创建一个新键,并将关联 ..
发布时间:2020-10-21 23:47:52 其他开发

在构造std :: vector时如何放置元素?

我想构造一个 std :: vector ,其中某些元素具有由某些特定构造函数而不是默认构造函数构造的这些元素。换句话说,我想在构建矢量时放置元素。我该怎么做? 考虑此: 结构项 { Item(double){} Item(const Item&)=删除; Item(Item&)=删除; }; std :: vector vv(10,3.14); //失 ..
发布时间:2020-09-27 23:30:30 其他开发

如何实现具有放置新功能和放置功能的简单容器?

我需要实现一个容器来容纳一定数量的元素,并且由于某种原因,它必须在没有任何堆分配的情况下工作.另一个要求是,不得以任何方式复制或移动容器元素.它们必须直接构造到容器分配的内存中. 为此,我决定使用newplacement并将内存管理完全委派给容器实现(在在此处找到了一个运行示例. (请注意,使用new uint8_t[size]和std::queue只是为了使示例保持简单.我的实际代码具有更 ..
发布时间:2020-07-03 19:19:30 C/C++开发