我注意到emplace_back
在一个std::vector
更改中先前向量元素的地址。为什么?
问问题
447 次
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 回答