我知道, >(或)>由于其边界检查,所以比 []/Cl>慢,这也在类似的问题中讨论,如C++向量AT/[]操作符速度或::STD::vector::():VS运算符[]&L&;书信电报;令人惊讶的结果!!慢/快5到10倍!。我只是不明白at()方法有什么好处
如果我有一个像这样的简单向量:std::vector<;int>;v(10)</我决定使用at()而不是[]来访问它的元素,当我有一个索引I并且我不确定它是否在向量范围内时,它会迫使我用try-catch块将它包装起来:
试试看
{
v、 at(i)=2;
}
渔获物(标准:超出范围和室外)
{
...
}
虽然我能够通过使用size()并自己检查索引来实现相同的行为,但这对我来说似乎更容易、更方便:
if(i<;v.size())
v[i]=2;
所以我的问题是:
使用vector::at比vector::operator[]有什么优势?
什么时候应该使用vector::at而不是vector::size+vector::operator[]?
我要说的是,vector::at()抛出的异常实际上并不打算被周围的代码捕获。它们主要用于捕获代码中的bug。如果您需要在运行时进行边界检查,例如索引来自用户输入,那么最好使用If语句。总之,在设计代码时,要确保vector::at()永远不会抛出异常,这样,如果抛出异常,并且程序中止,就表明存在错误。(就像一个assert())