有没有办法对向量的一部分进行基于范围的循环?例如,我想遍历向量的前 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 之前有没有类似的东西?
事实上的标准(库)是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是一个替代方案,尽管相比之下它的实现相当初级。