繁体   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