c++ - STL resize()的优点

标签 c++ stl

resize() 函数使 vector 包含所需数量的元素。如果我们需要的元素少于 vector 已经包含的元素,则最后的元素将被删除。如果我们要求 vector 增长,它会扩大其大小并用零填充新创建的元素。

 vector<int> v(20); 
 for(int i = 0; i < 20; i++) { 
     v[i] = i+1; 
    } 
  v.resize(25); 

 for(int i = 20; i < 25; i++) { 
     v[i] = i*2; 
   } 

但是如果我们在 resize() 之后使用 push_back()它会在新分配的大小之后添加元素,而不是 INTO 它。 在上面的例子中,结果 vector 的大小是 25,而如果我们在第二个循环中使用 push_back(),它将是 30。

 vector<int> v(20); 
 for(int i = 0; i < 20; i++) { 
     v[i] = i+1; 
  } 
 v.resize(25); 
  for(int i = 20; i < 25; i++) { 
  v.push_back(i*2);   // Writes to elements with indices [25..30), not [20..25) ! <
 } 

那么resize()函数的优势在哪里呢?它不会对从 vector 中索引和访问元素造成混淆吗?

最佳答案

听起来您应该使用 vector::reserve .

vector::resize用于使用给定值(或只是默认值)初始化新创建的空间。该函数的第二个参数是要使用的初始化值。

关于c++ - STL resize()的优点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2219772/

相关文章:

c++ - Git 和 KDevelop

c++ - 通用 lambda 的元数

C++,创建 vector 的 vector ?

c++ - 有没有办法使用 transform 而不是 for_each 来实现这个?如果是,这样做真的更好吗?

c++ - While 循环走得太远了

c++ - Mac 上 environ 的 header

c++ - 紧凑的偏移指针,现有的实现?

c++ - push_back 获取最后一个元素的 vector

c++ - 基类可以声明一个虚方法但不定义它吗?仍然在派生类中定义

c++ - 将迭代器获取到泛型类 : HOW TO 中的泛型容器