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