STL向量,push_back()和容量

时间:2013-08-14 19:04:22

标签: c++ vector capacity

我想知道当将矢量推到矢量矢量上时容量是否会延续。

说我的代码看起来像

std::vector< std::vector< int > >  vec_of_vec;
std::vector< int > tmp;

for (int i = 0 ; i < 100; ++i) {
   foo(tmp,i); // fills tmp with an arbitrary number of ints, different for each i.
   vec_of_vec.push_back(tmp);
   tmp.clear();
}

现在,由于.clear()不会降低容量,如果tmp的某个特定实例小于tmp.capacity()tmp.capacity()会缩小以适应tmp.size()一次它被推回到vec_of_vec?即哪个构造函数执行push_back调用,并且在进程中修改了容量?

2 个答案:

答案 0 :(得分:1)

项目推回vec_of_vec.back()的容量是实现定义的。

但是,由于tmp被复制到vec_of_vec(使用复制构造函数),原始tmp对象的容量在vec_of_vec.push_back()调用中保持不变。

答案 1 :(得分:0)

push_back将其参数复制到vec_of_vec中,因此tmp不再引用vec_of_vec中的内容,因此它是名为

的复制构造函数