vector.size是什么意思?

时间:2018-02-20 07:02:04

标签: c++ vector size

我想知道这段代码

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

为什么我会这样做?

2 个答案:

答案 0 :(得分:0)

矢量的大小(它包含的对象)不一定等于其容量(为其分配的存储空间)

查看http://www.cplusplus.com/reference/vector/vector/size/,您可以注意到这句话:“这是向量中保存的实际对象的数量,不一定等于其存储容量。”

如果您检查,您可以看到以下内容:http://www.cplusplus.com/reference/vector/vector/capacity/“此容量不一定等于矢量大小。它可以等于或大于等级,额外的空间允许适应增长而无需重新分配在每次插入时。“

我希望这能回答你的问题

答案 1 :(得分:0)

除了关于另一个答案中的向量容量之外,使用括号运算符(而不是提供绑定检查的at())访问向量的边界索引会产生undefined behavior

换句话说,行为没有在标准中定义,并且可以根据编译器之类的内容进行更改。在你的情况下,它显然没有崩溃并输出值,即使它们不再在向量中。

毋庸置疑,您希望确保您的程序没有未定义的行为。