基于范围的切片循环?

时间:2018-05-26 18:05:58

标签: c++ for-loop

有没有办法对矢量的一部分进行基于范围的for循环?例如,我想迭代向量的前5个元素:

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

我可以像How to make my custom type to work with "range-based for loops"?中指定的那样编写自己的容器,但我希望在boost或某些相关库中有更简单的方法。

C ++ 20似乎包含“范围”,但在20之前是否有类似内容?

1 个答案:

答案 0 :(得分:4)

事实上的标准(图书馆)是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是另一种选择,虽然它的实现相当简单。