[英]what does vector.size mean?
我想知道這個代碼
vector<pair<int,int>> map;
std::cout << "hello"<< std::endl;
map.push_back(make_pair(1,2));
map.push_back(make_pair(3,4));
map.push_back(make_pair(5,6));
map.resize(0);
std::cout << map[0].first
<< map[0].second << std::endl;
std::cout << map[2].first << std::endl;
std::cout << map.size() << std::endl;
std::cout << map.capacity() << std::endl;
我將地圖大小調整為 0,但結果顯示如下:
hello 12 5 0 4
為什么我會得到這個?
向量的大小(它包含的對象)不一定等於它的容量(為其分配的存儲空間)
查看http://www.cplusplus.com/reference/vector/vector/size/ ,你會注意到這樣一句話:“這是向量中實際持有的對象數量,不一定等於其存儲容量。 ”
如果你檢查你可以看到以下內容: http : //www.cplusplus.com/reference/vector/vector/capacity/ “這個容量不一定等於向量大小。它可以等於或更大,額外的空間允許適應增長,而無需在每次插入時重新分配。”
我希望這回答了你的問題
除了另一個答案中關於向量容量的事情之外,使用括號運算符(而不是at()
,它提供邊界檢查)訪問向量上的越界索引會產生未定義的行為。
換句話說,行為沒有在標准中定義,可以根據編譯器之類的東西改變。 在您的情況下,即使它們不再在向量中,它顯然也沒有崩潰並輸出值。
不用說,您要確保您的程序沒有未定義的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.