C++中vector的两种访问方式——vector[]与vector.at()的区别

说明

当我们定义一个数组vector b(10)后,b[]和b.at()都可以对v中元素进行访问,平时一般大家使用的都是v[]这种访问方法,以至于将v.at()这种访问方式忘记了。

vector[]和vector.at()的区别

b.v[]和b.at()都可以对v中元素进行访问,并且访问的元素时都不能越界,比如a[10]或a.at(10)这样的使用会报错。区别在于,operator[]不做边界检查, 哪怕越界了也会返回一个引用,当然这个引用是错误的引用,如何不小心调用了这个引用对象的方法,会直接导致应用退出。而由于at会做边界检查,如果越界,会抛出异常,应用可以try catch这个异常,应用还能继续运行。

比如我们运行下面代码:

vector<int>v;
cout << v[0] << endl;

会直接报错:
在这里插入图片描述
运行.at代码:

vector<int>v;
cout << v.at(0) << endl;

在这里插入图片描述
使用try,catch:

vector<int>v;
try 
{
    cout << v[0] << endl;
}
 
catch (const exception& e) 
{
    cerr << e.what() << endl;
}
 
catch (...) 
{
    cerr << "error" << endl;
}

此时输出异常信息:
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐