我知道 at()
比 []
慢因为它的边界检查,在类似的问题中也有讨论,如 C++ Vector at/[] operator speed或 ::std::vector::at() vs operator[] << surprising results!! 5 to 10 times slower/faster! .我只是不明白 at()
是什么方法很好。
如果我有一个像这样的简单 vector :std::vector<int> v(10);
我决定使用 at()
访问它的元素而不是 []
在我有索引 i
的情况下而且我不确定它是否在 vector 范围内,它迫使我用 try-catch block 包装它:
try
{
v.at(i) = 2;
}
catch (std::out_of_range& oor)
{
...
}
虽然我可以通过使用 size()
来获得相同的行为并自己检查索引,这对我来说似乎更容易和方便:
if (i < v.size())
v[i] = 2;
所以我的问题是:
使用vector::at有什么好处?超过 vector::operator[] ?
什么时候应该使用 vector::at而不是 vector::size + vector::operator[] ?
最佳答案
我会说 vector::at()
抛出的异常并不是真正打算被直接周围的代码捕获。它们主要用于捕获代码中的错误。如果您需要在运行时进行边界检查,例如索引来自用户输入,您确实最好使用 if
语句。所以总而言之,设计你的代码的意图是 vector::at()
永远不会抛出异常,这样如果它抛出异常,并且你的程序中止,那就是一个错误的迹象。 (就像一个 assert()
)
关于c++ - vector::at 与 vector::operator[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9376049/