Я знаю, что at()
медленнее, чем []
из-за его проверки границ, что также обсуждается в похожих вопросах, таких как С++ Vector at/[] speed оператора или :: std::vector:: at() vs operator [] < < удивительные результаты! От 5 до 10 раз медленнее/быстрее!. Я просто не понимаю, для чего подходит метод at()
.
Если у меня есть простой вектор, подобный этому: std::vector<int> v(10);
, и я решаю получить доступ к его элементам, используя at()
вместо []
в ситуации, когда у меня есть индекс i
, и я не уверен, что его в границах векторов, он заставляет меня обернуть его блоком try-catch:
try
{
v.at(i) = 2;
}
catch (std::out_of_range& oor)
{
...
}
хотя я могу сделать то же самое поведение, используя size()
и проверять индекс самостоятельно, что кажется мне проще и удобнее для меня:
if (i < v.size())
v[i] = 2;
Итак, мой вопрос:
Преимущества использования vector:: at over vector:: оператор []?
Когда следует использовать vector:: at, а не vector:: размер + vector:: operator []?