簡體   English   中英

vector.size 是什么意思?

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

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