2015-08-02 4 views
0

Я знаю, что вы не можете использовать итераторы со списком в форме «это + п», но почему то, что, когда я использую ++ это программа умеет компилировать именно: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 
} 
+0

Вы спрашиваете, почему дизайнеры стандартной библиотеки выбрали поддержку '++ begin', но не' begin + = n' ? –

+0

Возможно, потому что 'operator ++' перегружен. – iammilind

+0

Так как в стандарте указан итератор 'list' (' bidirectional_iterator'). Если вы хотите перейти на n, увеличьте n раз. – Peter

ответ

1

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

+1

Я нашел такие диаграммы, как [этот] (http://www.cplusplus.com/reference/iterator/), показывающий категории итераторов и операторы, которые они поддерживают. –