问题标签 [range-v3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
84 浏览

c++ - 编译 range-v3 const 方法时出现编译器错误

我想使用该range-v3库来提供对类的容器成员的访问。应该有一个可变的以及const访问。然而,编译下面的类会导致编译器错误。如果我将该const方法注释掉,编译器就没有什么可抱怨的了:

这里有什么问题?

0 投票
1 回答
208 浏览

c++ - CONCEPT_REQUIRES_ 范围内的实现-v3

尝试学习如何使用 Eric Niebler 的 range-v3 库,并阅读源代码,我看到了宏定义:

因此,简而言之,模板定义如下:

被翻译为:

我想知道为什么那个宏是这样实现的。为什么需要这个整数,为什么它需要一个false || cond而不只是一个cond模板参数?

0 投票
1 回答
313 浏览

c++ - range-v3 partial_sum 视图的 C++ 意外值类型

考虑以下最小示例:

这输出

我本来希望在这里看到双数,但结果显然是整数。这与 的行为相反view::transform

这样做的原因是因为在实现中,running-sum 值具有对应于源范围的类型:

这是故意的还是错误的?


讨论:我看到在尝试获取有效返回类型时遇到了麻烦,因为转换函数同时使用源范围和结果范围作为参数并产生返回类型。下一个应用程序使用 source-range-type 和这个返回类型来产生另一个(可能不同的)返回类型,依此类推。

这样,原则上,将源值类型与转换函数的结果类型重复链接。仅当结果类型“收敛”到所有其他中间结果都可以转换为的特定类型时,这种重复迭代才会产生可用的东西(在上面的示例中,这种类型是double,在第一次调用转换函数之后已经获得)。

有了这个观察,人们可以提出一种解决方法:应用二进制变换函数给定的次数,并使用common_type结果范围的 as 值类型(如果发现收敛,过早停止)。在最简单的情况下,迭代次数只有一次。如果这个迭代没有导致一些合理的事情,人们仍然可以求助于源值类型(或编译器错误)。

为了清楚起见,这里是上面示例的应用程序:

在第三次迭代之后,模式收敛,所以停止并选择 common-typedouble作为返回范围的 value_type。

我不确定这种方法在所有理论情况下是否完全有效,但至少它在第一个示例中给出了两倍——我想这是每个人都强烈期待的。

0 投票
1 回答
312 浏览

c++ - range-v3 和 view_facade,不能为 ForwardRange 建模

这个简化的测试用例(按照用户手册中的示例编写)无法编译

编译失败并出现 static_assert,因为根据 view::unique,我的范围没有模拟 ForwardRange 概念

但是如果我重写我的类以使用显式游标,编译成功

为什么第一堂课不是 ForwardRange 而第二堂课可以?view_facade<>::(begin|end)_cursor() 默认返回派生类的实例,所以我不明白为什么它不起作用。

我添加了一个静态断言以确保 range::range_access::single_pass_t 为假,因此我怀疑问题与 ForwardIterator 概念有关。

0 投票
2 回答
660 浏览

c++ - 用 range-v3 替换数据

TL;博士

怎么可能得到相同的结果

使用 range-v3,可能还有它的好语法?

编辑

我遇到麻烦的原因是对如何正确使用的误解ranges::copy:第二个参数必须是迭代器,而不是范围对象。我的错 ;)

尽管如此,我仍然在询问是否可以使用某种语法糖来执行范围分配,如下所示:

问题

我有两个固定大小的向量(在运行时)。我需要对第一个向量中的数据进行一些复杂的转换,并将结果存储在第二个向量中。我需要保留第一个向量,我不想创建一个新的临时向量。

通用代码

与标准

混合标准范围 v3

在这种简单的情况下,这样做有点不必要。但是,如果涉及多个操作,则创建范围视图然后使用std::copy特别有用。

我想写什么

我期待的是这个功能已经存在,我找不到它。

0 投票
1 回答
70 浏览

compare - 如何确定`ranges::view`对象和`std::vector`之间的等价性?

我正在使用优秀的range-v3库。我的一个函数返回一个ranges::view我想与std::vector. 当然,我可以逐个元素进行比较,但必须有更好的方法。

如何确定ranges::viewobject 和之间的等价性std::vector

0 投票
1 回答
338 浏览

c++ - Range-V3:获取基本迭代器

我尝试使用 Range-V3 库(用于 MSVC),但由于缺乏文档,我不明白如何做一件事。

我从中得到find_if什么?这是迭代器吗?我想获得一个基本元素的迭代器,即ss映射中的值。

这是我得到的错误:

0 投票
1 回答
1899 浏览

c++ - range-v3 如何操作::join with delimiter

我从 git 获得 MSVC 的 range-v3。并由 MSVC C++14 编译器编译。

考虑代码:

它按预期工作。但我想添加分隔符加入,如果我写

代码未编译。怎么了?大量编译器错误如下:

更新

不仅 MSVC 端口行为如此,这里也是如此

0 投票
1 回答
5175 浏览

c++ - 如何将 std::string 拆分为 std::string_views 的范围(v3)?

我需要std::string在所有空格处拆分 a 。然而,结果范围应将其元素转换为std::string_views。我正在为范围的“元素类型”而苦苦挣扎。我猜,类型类似于c_str. 如何将“拆分”部分转换为string_views?

0 投票
1 回答
145 浏览

c++ - 使用 range-v3 视图实现 begin()/end() 方法

是否可以在类内部使用视图来实现 begin() / end() 方法?

例如,我想让以下类可迭代;在每次迭代时,都会 op在两个可迭代对象的当前元素上调用。

感谢 range-v3,我可以使用zip_with视图(代码未经测试!)

但是我可以使用这个视图实现 begin() / end() 方法吗?

可以安全地比较两个迭代器(开始和结束)吗?

我想要实现的最终结果是可以嵌套任意数量的 binary_op: