Я знаю, что вы не можете использовать итераторы со списком в форме «это + п», но почему то, что, когда я использую ++ это программа умеет компилировать именно:C++ список итератора арифметика
//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
}
Вы спрашиваете, почему дизайнеры стандартной библиотеки выбрали поддержку '++ begin', но не' begin + = n' ? –
Возможно, потому что 'operator ++' перегружен. – iammilind
Так как в стандарте указан итератор 'list' (' bidirectional_iterator'). Если вы хотите перейти на n, увеличьте n раз. – Peter