﻿# V831\. Decreased performance\. Consider replacing the call to the 'at\(\)' method with the 'operator\[\]'\.

Анализатор обнаружил фрагмент кода, в котором используется доступ к элементу последовательного контейнера \(std::array, std::vector или std::deque\) с помощью метода 'at', при этом известно, что индекс является валидным\.

Метод 'at' получает элемент контейнера по заданному индексу\. Перед этим он проверяет находится ли индекс в допустимых пределах, и в случае выхода за границу контейнера генерирует исключение 'std::out\_of\_range'\. Если известно, что при обращении по индексу выход за границу не случится, использование метода 'at' можно безопасно заменить на 'operator\[\]', который не выполняет дополнительных проверок\. Удаление избыточной проверки ускорит выполнение кода\.

Рассмотрим пример:

```cpp
std::vector<std::string> namelessIds;
....
if (!namelessIds.empty()) {
  LIST<char> userIds(1);
  for (std::string::size_type i = 0; i < namelessIds.size(); i++) {
    userIds.insert(mir_strdup(namelessIds.at(i).c_str()));           // <=
  }
  ....
}
```

При обходе элементов вектора в цикле, выбираемый номер элемента не может стать больше номера самого последнего элемента\. Таким образом, код можно упростить если заменить 'at' на квадратные скобки:

```cpp
std::vector<std::string> namelessIds;
....
if (!namelessIds.empty()) {
  LIST<char> userIds(1);
  for (std::string::size_type i = 0; i < namelessIds.size(); i++) {
    userIds.insert(mir_strdup(namelessIds[i].c_str()));
  }
  ....
}
```