Канонический способ итерации с шагом итератора с произвольным доступом> 1? - PullRequest
0 голосов
/ 10 апреля 2020

Мы регулярно перебираем контейнеры с диапазоном-базой для 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) * вместо !=)?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...