Я заметил, что использование сокращения for (auto i : <iterable>)
даст вам i
, который:
а) на самом деле не является итератором.. или, по крайней мере, уже разыменован б) не позволит вам изменить итерируемый объект.
Поэтому этот код
std::vector<std::vector<int>> int_matrix(10);
for (auto line : int_matrix)
{
line.resize(10);
}
Не изменит размер векторов внутри матрицы, в отличие от этого кода:
for (auto line = int_matrix.begin(); line != int_matrix.end(); ++line)
{
line->resize(10);
}
Почему это так и как вы можете заставить итераторы из сокращения фактически изменять итерируемый объект?
std::vector
, используя цикл for диапазона, и ожидать, что он будет работать как обычный цикл for. - person R Sahu   schedule 04.05.2016