[英]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.