在Ranges-v3中,如何从一对迭代器创建一个范围?

尼古拉斯·M

给定传统的“开始”和“结束”迭代器对,我如何创建Ranges-v3兼容范围?

假设我正在编写一个接受两个迭代器的通用函数,以与遗留代码兼容。

struct result;  

bool keep_line(const std::string&);
result parse_line(const std::string&);

template <typename InputIt>
std::vector<result> parse_lines(InputIt begin, InputIt end)
{
    // This is what I want to do...
    auto lines = ranges::make_range_out_of_legacy_iterators(begin, end);

    return lines 
        | ranges::view::filter(keep_line) 
        | ranges::view::transform(parse_line) 
        | ranges::to<std::vector<result>>();
}
尼古拉斯·M

要从range-v3中的一对迭代器创建范围,请使用以下subrange视图

#include <range/view/subrange.hpp>

auto lines = ranges::subrange(begin, end);       // Requires C++17-style deduction

auto lines = ranges::make_subrange(begin, end);  // If template deduction not available

在旧版本的库中,显然使用iterator_rangeinrange/v3/iterator_range.hpp,但是在当前ranges-v3版本(0.9.1)中已将该标头标记为已弃用

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Swift 3 Ranges:最佳做法

Ranges-v3 中的随机操作

Ruby Ranges第一个和最后一个问题

如何声明ranges-v3视图的返回值?

将 std::ranges 算法与自定义容器和迭代器一起使用

我想基于绑在一起的2 np.ranges创建一个熊猫DF

如何使用一对迭代器(第一个,最后一个)在模板中创建一个容器?

EXCEL Multiple Continuous Ranges - 需要每个范围的连续答案

EXCEL 每个范围需要不同的答案,MULTIPLE RANGES

#include <ranges>,但未找到命名空间“范围”

我的自定义 std::ranges 迭代器中缺少什么?

Ranges::views 如何实现 O(1) 复杂度?

如何在 xcode 13 中使用 c++20 <ranges>?

C ++ 17中新的基于范围的for循环如何帮助Ranges TS?

C++20 std::ranges:范围适配器跳过每个第 n 个元素

如何在 Java/IntelliJ 中创建从一个类到另一个类的一对多和多对一关系

从一对一对应的数组创建一个表

您如何使用String.substringWithRange?(或Ranges如何在Swift中工作?)

如何创建一个带有迭代器的结构?

GCC的<experimental / ranges>过滤器视图无法使用无限范围iota()进行编译

C++ 为什么受约束的算法(例如 std::ranges::merge)也返回输入范围的结尾?

创建一个蛮力迭代器

无法创建具有值和界限的std :: ranges :: iota_view

如何从一个文件中创建多个列表?

如何确定ranges:view对象和std:vector之间的对等关系?

[ranges.subrange]中“ iterator-sentinel-pair”概念的目的是什么?

std::ranges::copy 将不接受 Visual Studio 中的 std::vector

如何创建一个迭代器,该迭代器生成由Rust中的索引列表指定的集合元素?

如何在相位器3中从一个场景到另一个场景传递数据?