`std :: vector`中的`emplace_back`如何工作?

时间:2016-03-07 17:11:26

标签: c++ c++11 stdvector emplace

我注意到emplace_back中的std::vector更改了以前的向量元素的地址。为什么呢?

3 个答案:

答案 0 :(得分:2)

从后备存储的角度来看,pushemplace是否无关紧要。论证的不同之处在于。

因此,通常的重新安置机制已经到位。当当前分配的连续存储空间耗尽时,它们将移动元素。

迭代器失效的规则保持不变。结帐" 迭代器失效"在http://en.cppreference.com/w/cpp/container/vector

答案 1 :(得分:0)

不幸的是,这是标准:如果new size()大于capacity(),那么所有迭代器和引用都将失效。

答案 2 :(得分:0)

如果向量的后备存储的当前容量无法容纳新元素,则必须分配一个新的,更大的后备存储,将所有现有元素移动到它,然后可以构建新元素。

使用emplace_back()并不会改变后备存储必须足够大以适应新元素的事实。