Если я правильно понимаю основанный на диапазоне цикл for, который расширяется
for ( range_declaration : range_expression ) loop_statement
в
{
auto && __range = range_expression ;
for (auto __begin = begin_expr, __end = end_expr;
__begin != __end; ++__begin) {
range_declaration = *__begin;
loop_statement
}
}
увеличивая таким образом указатель, и если я понимаю, что std::list
внутренне реализованы как двусвязные списки, не правильно ли предположить, что что-то подобное не print 0 1 2 3
, так как адреса памяти не являются последовательными (подразумевается ++__begin
)?
std::list<int> myList = {0, 1};
std::list<int> otherList = {10, 11};
myList.push_back(2);
myList.push_back(3);
for(auto& i: myList)
std::cout << i << " ";
И все же он печатает правильно. Итак, переопределяет ли std::list::iterator
поведение операторов, используемых в расширении диапазона для цикла?
Это особенно важно для меня, если я решу реализовать свой собственный диапазон для итеративных структур данных.