Я знаю, что at ()
медленнее, чем []
из-за проверки границ, которая также обсуждается в подобных вопросах, таких как C ++ Vector at / [] operator speed или :: std :: vector :: at () vs operator [] . Я просто не понимаю, для чего нужен метод at ()
.
Если у меня есть простой вектор вроде этого: std :: vector
и я решаю получить доступ к его элементам, используя вместо этого at ()
of []
в ситуации, когда у меня есть индекс i
, и я не уверен, что он находится в границах векторов, он заставляет меня обернуть его блоком try-catch :
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 [] ?