当前位置:   article > 正文

std::vector容器,用operator[]和at方法进行元素访问的区别_std::vector at

std::vector at

vector容器,用operator[]和at方法进行元素访问的区别

  1. 边界检查

    std::vector<int> v = {1, 2, 3};
    int a = v[5];    // 崩溃
    int b = v.at(5); // 抛出 std::out_of_range 异常
    
    • 1
    • 2
    • 3
    • operator[]:不进行边界检查,如果越界,比如访问-1位置,程序会直接崩溃,且不知道哪里出了问题,就算是debug模式下也不知道。
    • at:进行边界检查。如果访问的索引超出范围,会抛出一个 std::out_of_range 异常,在debug模式下,可以查看堆栈,追踪到抛出异常的位置,进行修复。
      Exception at 0x7ffd5a6fba99, code: 0xe06d7363: C++ exception, flags=0x1 (execution cannot be continued) in MSVCP140D!std::_Xout_of_range
      
      • 1
  2. 性能

    std::vector<int> v = {1, 2, 3};
    for (size_t i = 0; i < v.size(); ++i)
    {
        int a = v[i]; // 已知索引合法
    }
    
    int index = getUserInput();
    int b = v.at(index); // 索引可能不合法,需检查
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • operator[]:由于没有边界检查,比 at 更快。
    • at:由于需要进行边界检查,会有一些额外的开销,适合在不确定索引是否合法的情况下使用。

总结:

  • operator[] 可以在性能要求较高且能够确保索引合法的情况下使用。
  • at 可以在需要安全访问并希望捕获可能的越界错误的情况下使用。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/1011684
推荐阅读
相关标签
  

闽ICP备14008679号