我知道这at()比[]它的边界检查慢,这也在类似的问题中讨论,如C++ Vector at/[] operator speed 或:: std :: vector :: at()vs operator [] << Surprising results !! 速度慢5到10倍!.我只是不明白这种at()方法有什么用处.
如果我有一个像这样的简单向量:std::vector<int> v(10);我决定通过使用at()而不是[]在我有索引的情况下访问它的元素i并且我不确定它是否在向量范围内,它迫使我用try-catch包装它块:
try
{
v.at(i) = 2;
}
catch (std::out_of_range& oor)
{
...
}
Run Code Online (Sandbox Code Playgroud)
虽然我能够通过自己使用size()和检查索引来获得相同的行为,这对我来说似乎更容易和方便:
if (i < v.size())
v[i] = 2;
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
使用vector :: at over vector :: operator []有什么好处?
我什么时候应该使用vector :: at而不是vector :: size …