Операции над векторами. Обращение к элементам

   
На этом шаге мы рассмотрим особенности обращения к элементам вектора.

   
В таблице 1 перечислены все операции прямого обращения к элементам векторов. Как принято в С и C++, первому
элементу вектора соответствует индекс 0, а последнему - индекс size()-1. Таким образом, n-му элементу соответствует
индекс n-1. Для неконстантных векторов эти операции возвращают ссылку на элемент и поэтому могут использоваться для
модификации элементов (при условии, что модификация не запрещена по другим причинам).

Таблица 1. Операции обращения к элементам вектора

Операция Описание
c.at(idx) Возвращает элемент с индексом idx (при недопустимом значении индекса генерируется исключение out_of_range)
c[idx] Возвращает элемент с индексом idx (без интервальной проверки!)
c.front() Возвращает первый элемент (без проверки его существования!)
c.back() Возвращает последний элемент (без проверки его существования!)

   
Самый важный аспект для вызывающей стороны - наличие или отсутствие интервальной проверки при обращении к элементу. Такая
проверка выполняется только функцией at(). Если индекс не входит в интервал допустимых значений, генерируется исключение
out_of_range (смотри 47 шаг). Остальные функции выполняются без проверки, и
интервальные ошибки приводят к непредсказуемым последствиям. Вызов оператора [], функций front() и back() для пустого
контейнера всегда приводит к непредсказуемым последствиям.

  std::vector<Elem> coll;	// Пустой вектор!
  coll[5] = elem;               // ОШИБКА ВРЕМЕНИ ВЫПОЛНЕНИЯ
  std::cout << coll.front();    // ОШИБКА ВРЕМЕНИ ВЫПОЛНЕНИЯ

   
Следовательно, перед вызовом оператора [] необходимо убедиться в том, что индекс имеет допустимое значение, а перед вызовом
функции front() или back() - что контейнер не пуст:

  std::vector<Elem> coll;      // Пустой вектор!
  if (coll.size() > 5) {
    coll[5] = elem;  // OK
  }
  if (!coll.empty()) {
    cout << coll.front();   // OK
  }
  coll.at(5) = elem;     // Генерирует исключение out_of_range

   
На следующем шаге мы рассмотрим функции получения итераторов.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий