簡體   English   中英

當我調整向量的大小(向量)時會發生什么

[英]What happens when I resize this vector (of vectors)

std::vector<std::vector<int>> vecOfVecs;
vecOfVecs.resize(10);

vecOfVecs的0-9位置是什么? std :: vector的實例?

如果是這樣,這是否合法:

std::vector<int> *pToVec = &(vecOfVecs[0]);
pToVec->push_back(10);

是的,位置0-9將是std::vector<int>空實例,就像您說過的一樣

for (size_t i = vecOfVecs.size(); i < 10; ++i) {
    vecOfVecs.push_back(std::vector<int>());
}

C ++ 03中std::vector::resize的“規范”定義實際上有兩個參數,而不是一個,第二個參數是用作新創建元素的“填充值”的元素值。 第二個參數的默認參數等於元素類型的值初始化對象。 這意味着你的電話

vecOfVecs.resize(10);

實際上被翻譯成

vecOfVecs.resize(10, std::vector<int>());

呼叫。 也就是說,實際上是您隱式提供了一個默認構造的std::vector<int>實例,以用作所有新元素的初始化程序。

您的pToVec->push_back(10)調用是完全合法的。

C ++ 11對resize的定義進行了一些微不足道的更改(但在此情況下),但是總體效果仍然相同:新元素已為您值初始化。 可以在調用resize后立即使用它們。

默認的第二個參數resize告訴您要在附加空間中插入什么值。 如果未指定該值,則使用默認構造的值。

void resize (size_type n, value_type val = value_type());

如果n大於當前容器的大小,則通過在末尾插入任意數量的元素以達到n的大小來擴展內容。 如果指定了val ,則將新元素初始化為val副本,否則將對它們進行值初始化。

您的示例完全合法:向量的向量將包含十個空向量。

暫無
暫無

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

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