基于范围的切片循环?

Tho*_*son 3 c++ for-loop

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

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

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

C++20 似乎包括“范围”,但在 20 之前有没有类似的东西?

ild*_*arn 5

事实上的标准(库)是range-v3——它是这样的:

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

如果您需要 C++03 中的范围支持,Boost.Range是一个替代方案,尽管相比之下它的实现相当初级。

  • 还没有; 但 C++20 添加了 `std::span<>` ,这将允许这样做(但仅适用于像 `std::vector<>` 这样的连续范围),并且希望范围也是如此(尽管不太可能是这里使用的视图) )。 (2认同)