问题标签 [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.

0 投票
2 回答
797 浏览

c++ - 为什么矢量::emplace_back,这样 T 有一个已删除的复制构造函数,编译失败?

我无法编译以下dont_compile函数。我不明白为什么它不起作用。但是,它确实适用于list.

这是编译器的错误。它是一个错误吗?

我真的不明白_Up(...)是如何导致复制构造函数被调用的。

0 投票
1 回答
91 浏览

c++ - Why is the move constructor only called when there is already an element in the vector?

I am trying to learn the new features in C++11. And I am testing the following code in XCode.

When I uncomment the push back I get the following result:

Otherwise, if I comment it, I get:

My question is why is the move constructor not being called in second case? It is only being called in the first case when vector is initially not empty.

0 投票
1 回答
5751 浏览

c++ - std::vector emplace 和 std::vector emplace 与 pair

我有这个代码:

你能解释一下为什么吗?

0 投票
0 回答
219 浏览

c++ - 在 C++ 中的开放寻址哈希表中实现 emplace

我正在实现一个像这样的开放地址哈希表:

问题是我使用了在构造函数中预先分配的容量来减少分配开销。在emplace函数中,我需要找到正确的位置来构造值,但需要key才能得到这个位置。

我可以在value_type这里构造一个来获得,key但后来,我必须将它移动到buckets数组中的正确位置。

这个想法是只构建key堆栈,但我不知道该怎么做?

0 投票
2 回答
946 浏览

c++11 - 使用 emplace 添加到 std::map 时如何避免临时副本?

在防止临时复制方面,以上是emplace的正确用法吗?上述形式是否优于

或者这些形式是否等效并且它们都避免创建FooStruct?

0 投票
0 回答
620 浏览

c++ - 通过 emplace_back 实现 push_back

假设我们要设计一个C类似于std::vector. push_back通过调用来实现是不是一个好主意emplace_back,例如:

或者,或者:

?

0 投票
2 回答
1538 浏览

c++11 - 如何在构造 std::vector 时放置元素?

我想std::vector用一些元素构造一个,这些元素由某个特定的构造函数而不是默认构造函数构造。换句话说,我想在构建向量时放置元素。我怎样才能做到这一点?

考虑一下

0 投票
1 回答
268 浏览

c++ - std::vector 的类似位置的构造

想象一下,我想在std::vector没有移动或复制构造函数的情况下构造固定大小的对象,例如std::atomic<int>. 在这种情况下,底层std::atomic类有一个 1-arg 构造函数,它接受一个int,以及一个默认构造函数(将值初始化为 0)。

使用initializer_listlike 语法std::vector<std::atomic<int>> v{1,2,3}不起作用,因为T作为创建的一部分,参数首先转换为向量的元素类型,initializer_list因此将调用复制或移动构造函数。

在特定情况下,std::atomic<int>我可以默认构造向量,然后在以下情况下对元素进行变异:

然而,除了丑陋和低效之外,它不是一个通用的解决方案,因为许多对象可能无法提供与通过调用适当的构造函数可以获得的构造后突变等效。

有什么方法可以在向量构造中获得我想要的“类似位置”的行为?

0 投票
1 回答
2537 浏览

c++ - 在这个例子中,为什么需要使用 emplace_back 移动?

以下最小工作示例在使用选项 1 或选项 2 下的代码时编译,但在使用选项 3 下的代码时编译。我假设emplace_back()隐式使用/调用move构造函数,那么为什么需要显式move()?它与r-valuevs.有关系l-value吗?或者这是否与std::unique_ptr需要转让所有权有关?(我对这些概念还是陌生的,尤其是在这种情况下。)

为了完整起见,选项 4 withpush_back()也不会编译,除非move()被调用。


注意:我不认为这是关于将参数传递给函数的问题unique_ptr的重复,即使链接问题的答案很有用,因为这是询问unique_ptr 函数中定义 a 然后将其移动到成员vector以便它不会在函数结束时被销毁,此外,emplace_back()在这种情况下具体询问。

此外,我认为在这种情况下给出解释会很有用,因为有时很难将解释从一种情况翻译到另一种情况。谢谢!

0 投票
2 回答
1178 浏览

c++ - 放置复杂对象

我正在尝试在对象中实现“安放”功能。它的结构如下。我有一个将 size_t 与模板类型配对的模板对象。我希望能够在标准库容器中构建它,例如向量。我没有使用 a std::pair,因为我的班级B将围绕数据提供其他功能。

我需要如何修改代码,以便可以像在 main 中一样调用 emplace?