【问题标题】:STL vector: resize() and assign()STL 向量:resize() 和 assign()
【发布时间】:2013-10-30 03:29:52
【问题描述】:

有一个类成员std::vector<double> vint n,在这个没有初始化的vector上使用以下有什么区别:

v.assign(n, 0.0);

v.resize(n, 0.0);

【问题讨论】:

    标签: c++ vector stl


    【解决方案1】:

    assign 将大小设置为 n 并将所有元素值设置为 0.0,而 resize 将大小设置为 n 并且只有 new 元素值设置为 0.0。

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

    【讨论】:

      【解决方案2】:

      我猜未初始化,你的意思是它是默认初始化的,即一个空向量,那么

      v.assign(n, 0.0);
      

      v.resize(n, 0.0);
      

      两者都将向量的大小更改为n,并将所有元素更改为0.0。请注意,对于非空向量,它们通常不一样,resize() 只会将新元素设置为0.0

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2012-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多