在下面的代码中,我在调用内置 vector 的 clear( ) 方法之前和之后打印 vector 的第一个元素及其大小。
但是,即使在调用 clear( ) 之后,我仍然可以引用 vector 的元素(尽管大小已重置为“0”)。
这是预期的行为还是我没有很好地理解 clear() 的行为?
代码:
#include <vector>
#include <iostream>
using namespace std;
int main(int argc, char *argv[]){
vector<int> vec = {1, 2, 3, 4, 5};
cout << vec[0] << " " << vec.size() << endl;
vec.clear();
for(auto i : vec)
cout << i << " ";
cout << endl;
cout << vec[0] << " " << vec.size() << endl;
return 0;
}
输出:
1 5
1 0
最佳答案
std::vector<>
的索引运算符不检查索引。由于它是未定义的行为,您可能会得到“之前的内容”,或者它可能会崩溃(或“无论如何”)。
你有 at
成员函数,如果索引超出范围,它将抛出异常。即:
cout << vec.at(0) << " " << vec.size() << endl;
在您的 main()
接近尾声时会抛出。
关于c++ - 调用 clear() 后 vector 的元素仍然可以引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54886410/