标准矢量调整大小

时间:2011-01-05 15:59:55

标签: c++ vector resize std

我有一些std :: vector,我必须用一些默认值来调整它。这是代码:

static int Counter = 0;
class Data
{
   /* ... */
   Data() { 
      Counter++; 
      std::cout << Counter << std::endl;
   }
};

std::vector<Data> mArray;

for (int i=0; i <= 200; ++i)
{
   mArray.push_back(Data());
}

// And resizing somewhere:
std::cout << "Resizing!\n";
mArray.resize(400, Data());

据我所知,在插入200个项目之后,我可以使用resize函数调整它的大小,该函数为每个新元素采用新的大小和默认值。

当我运行该程序时,我看到:

0
1
2
...
199
200
Resizing
201

为什么在调整大小后只插入一个项目?

5 个答案:

答案 0 :(得分:12)

当添加的条目是复制构造时,您只能看到默认构造函数的计数。您还必须添加一个复制构造函数来计算副本:

   Data(const Data& other) { 
      // Actual copying code, whatever that may be
      Counter++; 
      std::cout << Counter << std::endl;
   }

答案 1 :(得分:5)

因为默认构造函数被调用一次:std :: vector复制其内容,所以你实际上是在复制相同的对象200次。

答案 2 :(得分:3)

因为resize将使用复制构造函数来插入新元素,因此默认构造函数只被调用一次。

答案 3 :(得分:2)

因为通过复制您通过其复制构造函数传递给resize()的Data实例来创建其他199个Data实例。

答案 4 :(得分:2)

您正在打印Counter++,而不是向量的大小(因为只创建了1个Data对象来初始化向量的其余部分,它只会增加一次)。