我知道 at()
比 []
慢,因为它的边界检查,这也在类似的问题如 C + + 矢量/[]运算符速度或 : : std: : Vector: : at () vs 操作符[] < < 惊人的结果! ! 慢5到10倍/更快!中讨论。我只是不明白 at()
方法有什么好处。
如果我有一个像这样的简单向量: std::vector<int> v(10);
,当我有一个 i
索引并且我不确定它的向量边界时,我决定使用 at()
而不是 []
来访问它的元素,它迫使我使用 用 try-catch 块包起来:
try
{
v.at(i) = 2;
}
catch (std::out_of_range& oor)
{
...
}
尽管我可以通过使用 size()
和自己检查索引来获得相同的行为,这对我来说似乎更容易和更方便:
if (i < v.size())
v[i] = 2;
所以我的问题是:
使用 矢量: : at比使用 操作符[]有什么优点?
什么时候应该使用 矢量: : at而不是 矢量: : 大小 + 操作符[]?