Я знаю, что at()это медленнее, чем []из-за проверки границ, которая также обсуждается в подобных вопросах, таких как C ++ Vector at / [] operator 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 над vector :: operator [] ?
Когда мне следует использовать vector :: at, а не vector :: size + vector :: operator [] ?