【问题标题】:Range-based for loop of slice?基于范围的切片循环?
【发布时间】:2018-05-27 02:42:09
【问题描述】:

有没有办法对向量的一部分进行基于范围的 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 之前有类似的吗?

【问题讨论】:

标签: c++ for-loop


【解决方案1】:

事实上的标准(库)是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 是一个替代方案,尽管相比之下它的实现相当初级。

【讨论】:

  • hm.. 所以这还不是标准的?这不是实验代码吗?
  • 不,还没有;但是 C++20 添加了std::span<>,这将允许这样做(但仅适用于像std::vector<> 这样的连续范围),并且希望范围也是如此(尽管不太可能是此处使用的视图)。
猜你喜欢
  • 2017-05-17
  • 2016-10-31
  • 1970-01-01
  • 2014-12-06
  • 2014-01-11
  • 2019-03-07
  • 2014-01-12
  • 2013-01-04
  • 1970-01-01
相关资源
最近更新 更多