我想知道这段代码
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
为什么我会这样做?
答案 0 :(得分:0)
矢量的大小(它包含的对象)不一定等于其容量(为其分配的存储空间)
查看http://www.cplusplus.com/reference/vector/vector/size/,您可以注意到这句话:“这是向量中保存的实际对象的数量,不一定等于其存储容量。”
如果您检查,您可以看到以下内容:http://www.cplusplus.com/reference/vector/vector/capacity/“此容量不一定等于矢量大小。它可以等于或大于等级,额外的空间允许适应增长而无需重新分配在每次插入时。“
我希望这能回答你的问题
答案 1 :(得分:0)
除了关于另一个答案中的向量容量之外,使用括号运算符(而不是提供绑定检查的at()
)访问向量的边界索引会产生undefined behavior。
换句话说,行为没有在标准中定义,并且可以根据编译器之类的内容进行更改。在你的情况下,它显然没有崩溃并输出值,即使它们不再在向量中。
毋庸置疑,您希望确保您的程序没有未定义的行为。