STL调整大小的优点()

wha*_*cko 2 c++ stl

resize()函数使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; 
   } 
Run Code Online (Sandbox Code Playgroud)

但是如果我们使用push_back()after resize(),它将在新分配的大小之后添加元素,但不是INTO它.在上面的例子中,结果向量的大小是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) ! <
 } 
Run Code Online (Sandbox Code Playgroud)

那么resize()功能的优势在哪里?它是否会为索引和访问向量中的元素造成混淆?

Ben*_*n S 6

听起来好像你应该使用它vector::reserve.

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