c ++ 11 — арифметика итератора списка C ++

Я знаю, что вы не можете использовать итераторы со списком в форме «it + n», но почему, когда я использую ++ it, программа может скомпилировать i.e:

//program compiles
list<int> v {1,2,3,4};
auto begin = v.begin(),
end = v.end();
while (begin != end) {
++begin;
begin = v.insert(begin, 42);
++begin;  // advance begin past the element we just added
}

//program doesn't compile
list<int> v{1,2,3,4};
auto begin = v.begin(),
end = v.end();
while (begin != end) {
begin+=1; //or alternatively begin = begin +1
begin = v.insert(begin, 42);  // insert the new value
++begin;  // advance begin past the element we just added
}

0

Решение

Согласно стандарту std :: list реализует двунаправленный итератор http://www.cplusplus.com/reference/iterator/BidirectionalIterator/ у которого нет оператора «+ =»

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector