簡體   English   中英

標准矢量調整大小

[英]Std vector resizing

我有一些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函數調整它的resize ,該函數為每個新元素采用新的大小和默認值。

當我運行該程序時,我看到:

0
1
2
...
199
200
Resizing
201

為什么調整大小后只插入1個項目?

當添加的條目是復制構造時,您只能看到默認構造函數的計數。 您還必須添加一個復制構造函數來計算副本:

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

因為默認構造函數被調用一次:std :: vector復制其內容,所以你實際上是復制相同的對象200次。

因為resize將使用復制構造函數來插入新元素,因此默認構造函數只調用一次。

因為通過復制您通過其復制構造函數傳遞給resize()的Data實例來創建其他199個Data實例。

您正在打印Counter++ ,而不是向量的大小(因為只創建了一個Data對象來初始化向量的其余部分,它只會增加一次)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM