调用clear()之后vector的元素仍可引用吗?

时间:2019-02-26 13:16:16

标签: c++ vector stl

在下面的代码中,在调用内置向量的clear()方法之前和之后,我将打印向量的第一个元素及其大小。

但是,即使在调用clear()之后,我仍然可以引用向量的元素(尽管将大小重置为'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

1 个答案:

答案 0 :(得分:2)

std::vector<>的索引运算符检查索引。由于它是未定义的行为,因此您可能会得到“之前有什么”,或者可能崩溃(或“任何”)。

您具有at成员函数,如果索引超出范围,该函数将引发。那就是:

cout << vec.at(0) << " " << vec.size() << endl;

您的main()末尾将抛出。