我注意到emplace_back
中的std::vector
更改了以前的向量元素的地址。为什么呢?
答案 0 :(得分:2)
从后备存储的角度来看,push
或emplace
是否无关紧要。论证的不同之处在于。
因此,通常的重新安置机制已经到位。当当前分配的连续存储空间耗尽时,它们将移动元素。
迭代器失效的规则保持不变。结帐" 迭代器失效"在http://en.cppreference.com/w/cpp/container/vector。
答案 1 :(得分:0)
不幸的是,这是标准:如果new size()大于capacity(),那么所有迭代器和引用都将失效。
答案 2 :(得分:0)
如果向量的后备存储的当前容量无法容纳新元素,则必须分配一个新的,更大的后备存储,将所有现有元素移动到它,然后可以构建新元素。
使用emplace_back()
并不会改变后备存储必须足够大以适应新元素的事实。