std::vector容器,用operator[]和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 异常
    
    • 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
      
  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); // 索引可能不合法,需检查
    
    • operator[]:由于没有边界检查,比 at 更快。
    • at:由于需要进行边界检查,会有一些额外的开销,适合在不确定索引是否合法的情况下使用。

总结:

  • operator[] 可以在性能要求较高且能够确保索引合法的情况下使用。
  • at 可以在需要安全访问并希望捕获可能的越界错误的情况下使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宗浩多捞

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值