c++ - STL vector 、push_back() 和容量

标签 c++ vector capacity

<分区>

我想知道当将一个 vector 推到一个 vector 的 vector 上时,容量是否会延续。

假设我有一个代码看起来像

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_o​​f_vec 上?即哪个构造函数执行 push_back 调用,并且在此过程中修改了容量?

最佳答案

被推回 vec_o​​f_vec.back() 的项目的容量是实现定义的。

然而,由于 tmp 被复制到 vec_o​​f_vec (使用复制构造函数),原始 tmp 对象的容量在 vec_o​​f_vec.push_back() 调用。

关于c++ - STL vector 、push_back() 和容量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18240163/

相关文章:

c++ - 运行时错误问题

c++ - 如何在 Xcode 中运行 C++

c++ - OpenGL 使用 std::vector 和 glm::vec3

hadoop - 如何删除 YARN 中的队列?

c# - 为什么 StringBuilder 的默认容量是 16 个字符?

c++ - 通过对数组元素的引用替换变量

c++ - 将 vector 存储和写入队列c++

c++ - 清除 vector 或定义新 vector ,哪个更快

java - 如果放入 hashmap 超过容量会怎样

c++ - 指针转换,无法将 Two* 转换为 One*