STL向量:resize()和assign()

时间:2013-10-30 03:29:53

标签: c++ vector stl

拥有一个班级成员std::vector<double> vint n,在此vector上使用以下内容之间的区别是什么,该内容未初始化:

v.assign(n, 0.0);

v.resize(n, 0.0);

3 个答案:

答案 0 :(得分:16)

assign将尺寸设置为n,所有元素值设置为0.0,而resize将尺寸设置为n且仅设置 new 元素值为0.0。

如果事先v为空,则它们是相同的,但assign可能更清晰。

答案 1 :(得分:12)

我猜是未初始化,你的意思是默认初始化,即空矢量,然后

v.assign(n, 0.0);

v.resize(n, 0.0);

都将向量的大小更改为n,将所有元素的大小更改为0.0。请注意,对于非空向量,它们通常不相同,resize()仅将新元素设置为0.0

答案 2 :(得分:1)

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

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

#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;
}