问题标签 [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++11 - c++11 operator[] 是否等同于地图插入时的 emplace?
对于 C++11,以下之间是否还有性能差异?
(std::map<Foo, std::vector<Bar> >
例如)
我没有弄清楚的部分是 operator[] 的确切内部。到目前为止,我的理解是(当密钥不存在时):
- 在地图内的适当位置创建一个新键和关联的空默认向量
- 返回关联空向量的引用
- 将 myVector 分配给参考???
第 3 点是我无法理解的部分,首先如何为引用分配新值?
尽管我无法对第 3 点进行排序,但我认为不知何故只需要复制/移动。假设 C++11 足够聪明,知道这将是一个移动操作,那么整个“[]”赋值是否已经比 insert() 便宜?它几乎等同于 emplace() 吗?---- 默认构造和移动内容,与直接在适当位置构造内容的向量?
c++ - c ++无序映射emplace无效参数
如果我有这张地图
我怎么能这样做:
但我不能这样做:
无效参数 ' 候选者是: ? emplace(#10000(...) && ...) ' 我不明白为什么会这样。感谢您提供任何帮助。
c++ - std::vector<>::emplace_back() 中的异常安全吗?
抛出异常时会发生什么std::vector<>::emplace_back()
?
例如:
和
我希望向量只包含第一个 Foo 对象。
是这样吗?这是由标准保证的吗?
还有:会不会有内存泄漏?
c++ - 将具有不可复制字段的对象插入 std::vector
我知道以下代码无法编译,因为 A 的移动构造函数被删除,因为互斥锁不可移动。
但是,如果我希望A
将我的存储在 std 容器中,我应该怎么做呢?我很乐意A
在容器“内部”建造。
c++ - 编辑给定键的无序映射中的值
以下是计算杂志中字数的 C++ 代码。如果它的值不存在,我正在尝试添加该单词,如果存在,则增加它。
但是当我尝试输出时,所有杂志键都给出 0 作为值。知道为什么吗?
c++ - c++程序中进程的内存使用情况
在我的 C++ 程序中,我使用
我添加了 1000000 个元素来映射,并在循环中不时检查进程的内存使用情况
然后我通过从地图中逐一删除元素再次打印进程 RSS 内存使用情况
使用这个内存使用函数
我想出了这个我真的无法理解的结果。
我觉得当我从地图中删除键值对时它应该释放内存。但是正如你所看到的,直到我最终删除(释放)地图时它才会释放内存
有人可以解释它在 c++ 中是如何发生的,我查看了 c++ map::emplace,erase function documentation.which 没有给出任何线索。
c++ - 在向量中放置派生的可移动但不可复制的会产生编译错误
我在尝试emplace_back
使用带有微妙继承扭曲的不可复制但可移动对象的向量时遇到编译器错误,据我所知,这不会改变问题。
这是合法的 C++ 并且这是 Visual Studio 2015 的错误,还是我犯了一个明显的错误?
输出 :
如果没有继承,即在 Test 中删除了复制构造函数并且没有基类,它可以正确编译。
不知何故,删除移动构造函数中的默认值使其也可以正确编译,但是我必须定义移动构造函数并且我不想去那里。
这意味着这编译得很好:
令人费解?
c++ - 是否可以在 std::optional 中放置一个实例而不检查/破坏前一个实例?
假设我们有一个变量
std::optional<T>
某种类型的类型T
。如果我想调用T
inside的构造函数x
并对其进行初始化,我可以调用成员函数std::optional::emplace
。据我所知,这个成员函数检查实例是否已经存在(即bool(x)
计算结果为true
),如果是这样,它首先销毁先前构造的实例,然后使用提供的构造函数和参数重新初始化它。
我想知道是否可以只进行初始化而不进行这种检查和销毁。在处理 时std::optional
,首先检查实例是否存在然后根据结果进行一些单独的工作似乎很常见。因此,似乎有理由认为,当我们需要在内部放置一个实例时std::optional
,我们已经知道它不包含任何已初始化的实例。std::optional::emplace
因此,提供一个不检查和破坏先前实例但std::optional
没有这样的成员函数的“不安全版本”似乎是合理的。有没有办法做到这一点?
也许,如果有一些关于内存布局的保证std::optional
(我猜不是),那么我可以直接调用放置new
运算符......
c++ - 为什么聚合结构可以进行大括号初始化,但不能使用与大括号初始化中相同的参数列表来放置?
看起来像这样的代码:
在这种情况下可以使其正常工作,但事实并非如此(我明白为什么)。提供bla
构造函数可以解决这个问题,但会消除类型的聚合性,这可能会产生深远的影响。
这是标准中的疏忽吗?还是我错过了某些情况下这会在我的脸上爆炸,或者它没有我想的那么有用?
c++ - 奇怪的 std::vector::emplace() 编译错误
我在使用std::vector::emplace()
and时遇到了一个奇怪的编译器错误std::vector::emplace_back()
:
当我编译这个时,我得到以下错误:
但是,如果我注释掉声明 1 并改用声明 2,则代码编译得很好。这里发生了什么?