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