Я знаю, что 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 [] ?