Объяснение функции стирания вектора C ++ - PullRequest
0 голосов
/ 13 мая 2018

Я запустил следующий код:

v1.assign(10,50);
v1.insert(v1.end(),22);
cout << "v1 > " << endl;
print(v1);
// prints 50 50 50 50 50 50 50 50 50 50 22
v1.erase(v1.begin()+2)v1.assign(10,50);
v1.insert(v1.end(),22);
cout << "v1 > " << endl;
print<int>(v1);

v1.erase(v1.begin()+2);

for (int i=0;i<11;i++)
    cout << v1[i] << " ";
cout << endl << endl;;

for (int i=0;i<11;i++)
    cout << v1[i] << " ";
cout << endl << endl;

По мне, ожидаемый результат должен быть:

50 50 50 50 50 50 50 50 50 22

(9 раз 50, один раз 22)

но на самом деле это:

50 50 50 50 50 50 50 50 50 22 22

(9 раз 50)

1 Ответ

0 голосов
/ 13 мая 2018

ваш второй v1.assign(10,50); в основном сбрасывает вектор, дающий 10 раз 50, затем вы добавляете 22, дающий вектор длины 11, затем вы стираете 1 элемент, дающий вектор длины 10

перед вашим циклом:

for (int i=0;i<11;i++)
    cout << v1[i] << " ";

обращается к вектору вне пределов, давая вам любое значение, которое находится в памяти рядом с вектором.

зацикливает вектор, подобный этому, чтобы предотвратить такие ошибки:

for (const auto& element : v1)
{
    cout << element  << " ";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...