`std::vector` 中的 `emplace_back` 是如何工作的?
How does `emplace_back` in an `std::vector` work?
我注意到 std::vector
中的 emplace_back
更改了先前向量元素的地址。为什么?
从后备存储的角度来看,push
还是 emplace
都没有关系。争论的区别。
因此,通常的搬迁机制已经到位。当当前分配的连续存储耗尽时,它们将移动元素。
迭代器失效规则保持不变。在 http://en.cppreference.com/w/cpp/container/vector.
上检查“迭代器失效”
不幸的是,这是标准的:如果新的 size() 大于 capacity(),那么所有迭代器和引用都将失效。
如果向量后备存储的当前容量不能容纳新元素,则必须分配一个新的、更大的后备存储,将所有现有元素移至其中,然后就地构建新元素。
使用 emplace_back()
不会改变后备存储必须足够大以容纳新元素这一事实。
我注意到 std::vector
中的 emplace_back
更改了先前向量元素的地址。为什么?
从后备存储的角度来看,push
还是 emplace
都没有关系。争论的区别。
因此,通常的搬迁机制已经到位。当当前分配的连续存储耗尽时,它们将移动元素。
迭代器失效规则保持不变。在 http://en.cppreference.com/w/cpp/container/vector.
上检查“迭代器失效”不幸的是,这是标准的:如果新的 size() 大于 capacity(),那么所有迭代器和引用都将失效。
如果向量后备存储的当前容量不能容纳新元素,则必须分配一个新的、更大的后备存储,将所有现有元素移至其中,然后就地构建新元素。
使用 emplace_back()
不会改变后备存储必须足够大以容纳新元素这一事实。