vector :: at vs. vector :: operator []

Я знаю, что at () медленнее, чем [] из-за проверки границ, которая также обсуждается в подобных вопросах, таких как C ++ Vector at / [] operator speed или :: std :: vector :: at () vs operator [] . Я просто не понимаю, для чего нужен метод at () .

Если у меня есть простой вектор вроде этого: std :: vector v (10); и я решаю получить доступ к его элементам, используя вместо этого 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 [] ?

79
задан Community 23 May 2017 в 12:18
поделиться