1

我注意到emplace_back在一个std::vector更改中先前向量元素的地址。为什么?

4

3 回答 3

2

从后备存储的角度来看,无论您是否push重要emplace。不同之处在于论点。

因此,通常的搬迁机制已经到位。当当前分配的连续存储用完时,它们将移动元素。

迭代器失效的规则保持不变。在http://en.cppreference.com/w/cpp/container/vector上检查“迭代器失效” 。

于 2016-03-07T17:15:45.473 回答
0

不幸的是,这是标准的:如果新的 size() 大于 capacity() 则所有迭代器和引用都无效。

于 2016-03-07T17:18:11.670 回答
0

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

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

于 2016-03-07T17:20:47.717 回答