【问题标题】:Accessing negative index of vector via operator[] and .at()通过 operator[] 和 .at() 访问向量的负索引
【发布时间】:2023-04-03 02:45:01
【问题描述】:
vector<int> input = {1, 2, 3, 4, 17, 117, 517, 997};
cout<< "input vector at index -1 is: " << input[-1] <<endl;

使用上面的代码,结果将是:索引-1处的输入是:0。 但是,如果我们使用以下方法:

vector<int> input = {1, 2, 3, 4, 17, 117, 517, 997};
cout<< "input vector at index -1 is: " << input.at(-1) <<endl;

结果将是: 索引 -1 处的输入是:libc++abi.dylib: 以 std::out_of_range: 向量类型的未捕获异常终止。

谁能给我解释一下原因?谢谢。

【问题讨论】:

    标签: c++ c++11 vector stl indexoutofboundsexception


    【解决方案1】:

    首先是未定义的行为。什么事情都可能发生。不管发生什么,你都不能抱怨。

    第二个,一个异常被抛出而你没有捕捉到它,所以std::terminate()被调用并且你的程序死掉了。结束。

    【讨论】:

      【解决方案2】:

      at 成员会进行范围检查并做出适当的响应。

      operator [] 没有。这是未定义的行为和代码中的错误。

      这在文档中有明确说明。

      【讨论】:

      • 你能告诉我可能是什么错误吗?似乎对于每个输入向量,当我使用 operator[] 时,它在 -1 处的索引始终为 0。
      • @FengZhou 您在该位置看到0 真是巧合。这仍然是一个非法的声明。您正在查看向量的内容之外。不允许查看的内容包含0
      • 谢谢。是的,我猜这是巧合。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 2021-12-17
      • 2020-11-10
      • 1970-01-01
      相关资源
      最近更新 更多