问题标签 [emplace]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何实现一个具有放置新和就位功能的简单容器?
我需要实现一个容器来容纳大量元素,并且由于某种原因,它必须在没有任何堆分配的情况下工作。另一个要求是,不应以任何方式复制或移动容器元素。它们必须直接构建到容器分配的内存中。
为此,我决定使用placement new 并将内存管理完全委托给容器实现(在drdobbs找到了一些关于placement new 的有用信息)。
在这里可以找到一个运行示例。(请注意,使用new uint8_t[size]
andstd::queue
只是为了保持示例简单。我的真实代码具有更复杂、无堆的实现。)
到目前为止,这非常有效,因为客户端代码必须通过以下调用将元素放入容器中:
现在我想删除executer
此语句中重复写入的需要。我宁愿写一些类似的东西,例如:
或者
也许通过提供适当的模板,但我没有写一个(请不要使用预处理器宏)。
std::allocator
我在drdobbs找到了一些有用的信息,但不知道如何将其应用于我的问题(此外,这篇文章是 anno 2000 的,所以不要利用可能的 C++11 优势)。
有人能帮我找到一种不再需要executer
两次的方法吗?
编辑:成功批准Jarod42的答案后,我在这里更新了我正在运行的示例代码。
对于历史,这里是我最初问题的原始示例代码:
c++ - emplace 和 unordered_map >
我有一个std::unordered_map<string, std::array<int, 2>>
. emplace
将值插入地图的语法是什么?
我正在使用clang++ -c -x c++ -std=c++14
和叮当 3.6.0
我在http://ideone.com/pp72yR中测试了代码
附录:(4)由 Nathan Oliver 在下面的答案中提出
c++ - 将向量元素分配给调用 emplace_back 的函数的结果?
以下类的测试方法没有我期望的效果。我怀疑这与 emplace_back 的调用以某种方式使通过下标获得的引用无效这一事实有关。
无论哪种方式,我都希望测试中的第二次打印会导致
但是两者都导致
暗示任务没有发生。
我知道我可以通过创建一个临时文件来存储 add 的结果然后执行分配来解决这个问题,但我对为什么我不能只使用直接分配以及为什么我在尝试时没有遇到任何错误感兴趣执行此操作。
使用 MSVC (Visual Studio 2015) 编译和测试。
php - 是否在服务器和客户端的设备上都创建了 sqlite 数据库?
我最近将我的网站文件更新到我的服务器。但是我的 sqlite 数据库已经在服务器上创建,但我希望它在访问者的设备上。我认为sqlite被用于网站的离线目的,我有点困惑请帮助我
我的脚本:
它是在我的服务器上而不是在设备上创建的
c++ - 为什么将 emplace_back 与已删除的复制构造函数一起使用不起作用?
我有一个类型,我从中删除了复制构造函数,我想拥有一个vector
这种类型,所以我需要通过emplace_back
. 但是,似乎需要一个复制构造函数,因为编译器会发出警告,指出由于复制构造函数已被删除emplace_back
而无法实例化。emplace_back
为什么需要复制构造函数?我认为重点是在不复制任何内容的情况下emplace_back
构建。vector
我什至可以拥有一个vector
没有复制构造函数的对象吗?
编译器是 clang/llvm。
c++ - 如何避免 lambda 函数中的隐式移动构造函数
我正在使用“emplace”方法来避免内存复制。但是,当我在 Lambda 函数中使用“emplace”时。它总是调用隐式移动构造函数。如何避免 Lambda 函数中的内存复制?此示例程序不应打印“我正在被移动”。</p>
c++ - 之间的区别的就位和推动
<queue>
's emplace 和 push有什么区别?
这是关于std::queue::emplace和std::queue::push 的解释。
两种方法都在其当前最后一个元素之后添加元素,返回None
。
c++ - priority_queue emplace 给出分段错误
以下代码给出了分段错误,有人可以启发我吗?我想要实现的只是让优先级队列按 tv.t 的升序或 tv.m 的降序排序。
c++ - unordered_map emplace 编译错误
我在myclass.h文件中有以下代码:
然后,myFunction如下所示:
当我尝试编译时,我得到:
术语不计算为带 1 个参数的函数
如果我评论emplace行,错误就会消失。但是,我没有发现与此函数签名相关的任何滥用:http: //en.cppreference.com/w/cpp/container/unordered_map/emplace
任何帮助将非常感激。
c++ - `std::vector` 中的 `emplace_back` 如何工作?
我注意到emplace_back
在一个std::vector
更改中先前向量元素的地址。为什么?