调整外部向量的大小会复制内部向量吗?

时间:2013-12-20 05:33:56

标签: c++ vector

假设你有一个矢量矢量:

vector<vector<string> > v;

当外部向量的内部数组调整大小时(假设内部数组也必须重新分配到不同的地址),例如通过执行大量v.push_back(),内部向量的内部数组也被复制(因为vector的复制构造函数通常复制内部数组),或者C ++是否有办法调整外部向量的大小而不会递归复制所有内容?

C ++ 11移动构造函数会影响这个吗?这取决于STL实现吗?

2 个答案:

答案 0 :(得分:3)

是的,在C ++ 03中,当外部向量需要重新分配时,会复制内部向量。在C ++ 11中,它们被移动了。只有实现正确,它才取决于实现。如果实现是正确的,那就是行为。

答案 1 :(得分:3)

是的,如果向量使用的存储(“外部”)不能仅扩展但移动到不同的地址,那么向量中的数据(无论数据是什么)必须是也感动了。这就是为什么矢量的迭代器应该被视为无效的原因。 push_back