Мы регулярно перебираем контейнеры с диапазоном-базой для l oop или подходом, основанным на итераторах до C ++ 11:
for(auto current = container.begin(); current != container.end(); ++current)
Обычно это преподается как наиболее предпочтительный способ по сравнению с "C -i sh" итерации на основе приращений индекса:
for(auto currentId = 0; currentId != container.size(); ++currentId)
И все же, что если требуется выполнить итерацию каждого элемента N th , например, каждого третьего?
ошибочное переписывание вышеуказанного подхода даст:
// Error
for(auto current = container.begin(); current != container.end(); current += 3)
Теперь наши программы демонстрируют неопределенное поведение каждый раз (container.size() % 3) != 0
.
- Каким был бы канонический способ C ++ для удовлетворения такого требования?
- Можно ли сделать это разумно с помощью итераций, основанных на итераторах?
- Должны ли мы вернуться к индексам (с сопоставлением, равным * 1024) * вместо
!=
)?