c++ - 调用 clear() 后 vector 的元素仍然可以引用?

标签 c++ vector stl

在下面的代码中,我在调用内置 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/

相关文章:

c++ - 用于查找文件名索引的 libzip 函数不起作用 C++

c++ - vkCreatePipeline 失败和验证层段错误

c++ - 这是标准库错误还是我的错误?

c++ - 重载类型转换到初始值设定项列表

STL - 如何在 Objective-C++ std::map 中使用 NSString 作为键

C++ 逻辑真一元函数

c++ - 如何制作不接受浮点值的整数验证函数?

C++ 打印从字符串转换而来的 vector 的内容

c++ - std::vector::size 返回一个 int 类型或 unsigned int

C++ 为容器编写分配过程