Элементы вектора по-прежнему могут ссылаться после вызова clear ()? - PullRequest
0 голосов
/ 26 февраля 2019

В следующем коде я печатаю первый элемент вектора и его размер до и после вызова метода clear () встроенного вектора.

Однако даже после вызова clear ()Я все еще могу сослаться на элемент вектора (хотя размер сбрасывается до '0').

Это ожидаемое поведение или я плохо понял поведение clear ()?

КОД:

#include <vector>
#include <iostream>

using namespace std;

int main(int argc, char *argv[]){
  vector<int> vec = {1, 2, 3, 4, 5};

  cout << vec[0] << " " << vec.size() << endl;

  vec.clear();

  for(auto i : vec)
    cout << i << " ";
  cout << endl;

  cout << vec[0] << " " << vec.size() << endl;
  return 0;
}

ВЫХОД:

1 5

1 0

1 Ответ

0 голосов
/ 26 февраля 2019

Оператор индексирования std::vector<> не проверяет индекс.Поскольку это неопределенное поведение, вы можете получить «то, что было раньше», или это может привести к сбою (или «что угодно»).

У вас есть функция-член at, которая будет выдавать, если индекс выходит за пределы диапазона,То есть:

cout << vec.at(0) << " " << vec.size() << endl;

в конце вашего main() броска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...