На основе диапазона для петли среза? - PullRequest
0 голосов
/ 26 мая 2018

Есть ли способ сделать основанный на диапазоне цикл for части вектора?Например, я хотел бы перебрать первые 5 элементов вектора:

for(auto& elem : my_vector[0:5]) {  // Syntax obviously doesn't exist
  do_stuff(elem);
}

Я мог бы написать свой собственный контейнер, как указано в Как заставить мой пользовательский тип работать с диапазономна основе циклов "? , но я надеюсь, что есть более простой способ в boost или некоторой связанной библиотеке.

C ++ 20, кажется, включает «диапазоны», но есть ли что-нибудь подобное до 20?

1 Ответ

0 голосов
/ 26 мая 2018

Фактическим стандартом (библиотекой) для этого является range-v3 - вот как это выглядит:

for (auto& elem : ranges::view::slice(my_vector, 0, 5)) { ... }
// or
for (auto& elem : ranges::view::take(my_vector, 5)) { ... }

Если вам нужна поддержка диапазона в C ++ 03, Boost.Range является альтернативой, хотя его реализация довольно проста в сравнении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...