STL向量:resize()和assign()

Ole*_*ikh 14 c++ stl vector

有一个类成员,std::vector<double> v并且int n使用以下内容之间的区别是什么vector,未初始化:

v.assign(n, 0.0);
Run Code Online (Sandbox Code Playgroud)

要么

v.resize(n, 0.0);
Run Code Online (Sandbox Code Playgroud)

Pot*_*ter 19

assign将大小设置为n与所有元素值为0.0,而resize将大小设置为n,只有新的元素值为0.0.

如果v事先是空的,它们是相同的,但assign可能更清楚.


Yu *_*Hao 12

我猜想没有初始化,你的意思是默认初始化,即空矢量

v.assign(n, 0.0);
Run Code Online (Sandbox Code Playgroud)

v.resize(n, 0.0);
Run Code Online (Sandbox Code Playgroud)

两者都改变​​了矢量的大小n和所有元素0.0.请注意,对于非空向量,它们通常不相同,resize()只将新元素设置为0.0.


Cro*_*oCo 6

分配意味着用新属性(大小和元素)替换向量。调整大小意味着保留旧数据并用新元素扩展新向量,以防新尺寸大于旧尺寸,否则缩小尺寸并消除多余的。

运行以下代码两次。一个用于分配第二个用于调整大小(只需取消注释第一个)。

#include <iostream>
#include <vector>


int main ()
{
  std::vector<int> vec1;

  vec1.assign(7,100);     
  // vec1.resize(7, 100);
  std::cout << "Size: " << vec1.size() << std::endl;
  for (unsigned int i(0); i < vec1.size(); ++i)
  {
    std::cout << vec1[i] << std::endl;
  }

  vec1.resize(4,5); 
  // vec1.assign(4,5); 
  std::cout << "\nSize: " << vec1.size() << std::endl;
  for (unsigned int i(0); i < vec1.size(); ++i)
  {
    std::cout << vec1[i] << std::endl;
  }

  vec1.resize(10,5); 
  // vec1.assign(10,5); 
  std::cout << "\nSize: " << vec1.size() << std::endl;

  for (unsigned int i(0); i < vec1.size(); ++i)
  {
    std::cout << vec1[i] << std::endl;
  }
 
  std::cin.get();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)