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