Итератор begin() должен содержать 3, вывод говорит 2?
Почему итератор, указывающий на начало списка, выводит второе значение? Почему a.begin()++ покидает begin () впереди и есть ли лучшая реализация?
#include <iostream>
#include <list>
using namespace std;
//3,2,1
int main() {
list<int> a;
a.insert(a.begin(),1);
cout << *(a.begin()) << endl;
a.insert(a.begin(),3);
cout << *a.begin()<< endl;
a.insert(a.begin()++,2);
list<int>::iterator iterator = a.begin();
iterator++;
cout << *iterator << endl;
return 0;
}
Мой вывод:
1
3
3
Ожидаемый результат:
1
3
2
Редактировать: "Поскольку вы ставите 2 в начале списка. Помните, что a.begin()++ выполняет постинкрементное увеличение, т. Е. Увеличивается после всех других операций. Попробуйте свой код с помощью ++a.begin() и посмотрите если он делает то, что вы ожидаете "- @Ben
Типографская ошибка, спасибо Бен.
2 ответа
Похоже, это было просто забыть, что a.insert(a.begin()++,2);
эквивалентно a.insert(a.begin(), 2)
в этом случае. Это потому, что постинкремент добавит 2
в начало списка, затем увеличьте итератор. Если вы хотите получить ожидаемый результат, вам нужно использовать оператор предварительного увеличения. то есть:
a.insert(++a.begin(), 2)
Код в порядке:
#include <iostream>
#include <list>
using namespace std;
//3,2,1
int main() {
list<int> a;
a.insert(a.begin(),1);
cout << *(a.begin()) << endl;
a.insert(a.begin(),3);
cout << *a.begin()<< endl;
a.insert(a.begin()++,2);
list<int>::iterator iterator = a.begin();
cout << *iterator << endl;
return 0;
}
Выход:
1
3
2
Проверьте в Ideone тоже.