对于C++的STL内的顺序容器,可以使用下标或at函数对容器内的元素进行访问,如:
//假设存在一个容器vector<int> v,现在要访问其第i个成员,下面两种方式是等价的
v[i]
v.at(i)
二者的区别在于,如果下标越界(编译器并不检查这种错误),在运行时at函数会抛出一个out_of_range的异常,而下标操作不进行任何输出或直接运行奔溃:
void test1()
{
vector<int> v; //定义一个空容器
cout << v[0] << endl; //运行错误,容器内无任何元素,无法访问
}
void test2()
{
vector<int> v; //定义一个空容器
cout << v.at(0) << endl; //无法访问,抛出异常
}
//这段代码的运行结果:
terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check: __n (which is 0) >= this->size() (which is 0)