问题标签 [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.
c++ - 编译 range-v3 const 方法时出现编译器错误
我想使用该range-v3
库来提供对类的容器成员的访问。应该有一个可变的以及const
访问。然而,编译下面的类会导致编译器错误。如果我将该const
方法注释掉,编译器就没有什么可抱怨的了:
这里有什么问题?
c++ - CONCEPT_REQUIRES_ 范围内的实现-v3
尝试学习如何使用 Eric Niebler 的 range-v3 库,并阅读源代码,我看到了宏定义:
因此,简而言之,模板定义如下:
被翻译为:
我想知道为什么那个宏是这样实现的。为什么需要这个整数,为什么它需要一个false || cond
而不只是一个cond
模板参数?
c++ - range-v3 partial_sum 视图的 C++ 意外值类型
考虑以下最小示例:
这输出
我本来希望在这里看到双数,但结果显然是整数。这与 的行为相反view::transform
。
这样做的原因是因为在实现中,running-sum 值具有对应于源范围的类型:
这是故意的还是错误的?
讨论:我看到在尝试获取有效返回类型时遇到了麻烦,因为转换函数同时使用源范围和结果范围作为参数并产生返回类型。下一个应用程序使用 source-range-type 和这个返回类型来产生另一个(可能不同的)返回类型,依此类推。
这样,原则上,将源值类型与转换函数的结果类型重复链接。仅当结果类型“收敛”到所有其他中间结果都可以转换为的特定类型时,这种重复迭代才会产生可用的东西(在上面的示例中,这种类型是double
,在第一次调用转换函数之后已经获得)。
有了这个观察,人们可以提出一种解决方法:应用二进制变换函数给定的次数,并使用common_type
结果范围的 as 值类型(如果发现收敛,过早停止)。在最简单的情况下,迭代次数只有一次。如果这个迭代没有导致一些合理的事情,人们仍然可以求助于源值类型(或编译器错误)。
为了清楚起见,这里是上面示例的应用程序:
在第三次迭代之后,模式收敛,所以停止并选择 common-typedouble
作为返回范围的 value_type。
我不确定这种方法在所有理论情况下是否完全有效,但至少它在第一个示例中给出了两倍——我想这是每个人都强烈期待的。
c++ - range-v3 和 view_facade,不能为 ForwardRange 建模
这个简化的测试用例(按照用户手册中的示例编写)无法编译
编译失败并出现 static_assert,因为根据 view::unique,我的范围没有模拟 ForwardRange 概念
但是如果我重写我的类以使用显式游标,编译成功
为什么第一堂课不是 ForwardRange 而第二堂课可以?view_facade<>::(begin|end)_cursor() 默认返回派生类的实例,所以我不明白为什么它不起作用。
我添加了一个静态断言以确保 range::range_access::single_pass_t 为假,因此我怀疑问题与 ForwardIterator 概念有关。
c++ - 用 range-v3 替换数据
TL;博士
怎么可能得到相同的结果
使用 range-v3,可能还有它的好语法?
编辑
我遇到麻烦的原因是对如何正确使用的误解ranges::copy
:第二个参数必须是迭代器,而不是范围对象。我的错 ;)
尽管如此,我仍然在询问是否可以使用某种语法糖来执行范围分配,如下所示:
问题
我有两个固定大小的向量(在运行时)。我需要对第一个向量中的数据进行一些复杂的转换,并将结果存储在第二个向量中。我需要保留第一个向量,我不想创建一个新的临时向量。
通用代码
与标准
混合标准范围 v3
在这种简单的情况下,这样做有点不必要。但是,如果涉及多个操作,则创建范围视图然后使用std::copy
特别有用。
我想写什么
我期待的是这个功能已经存在,我找不到它。
compare - 如何确定`ranges::view`对象和`std::vector`之间的等价性?
我正在使用优秀的range-v3库。我的一个函数返回一个ranges::view
我想与std::vector
. 当然,我可以逐个元素进行比较,但必须有更好的方法。
如何确定
ranges::view
object 和之间的等价性std::vector
?
c++ - Range-V3:获取基本迭代器
我尝试使用 Range-V3 库(用于 MSVC),但由于缺乏文档,我不明白如何做一件事。
我从中得到find_if
什么?这是迭代器吗?我想获得一个基本元素的迭代器,即ss
映射中的值。
这是我得到的错误:
c++ - range-v3 如何操作::join with delimiter
我从 git 获得 MSVC 的 range-v3。并由 MSVC C++14 编译器编译。
考虑代码:
它按预期工作。但我想添加分隔符加入,如果我写
代码未编译。怎么了?大量编译器错误如下:
更新
不仅 MSVC 端口行为如此,这里也是如此
c++ - 如何将 std::string 拆分为 std::string_views 的范围(v3)?
我需要std::string
在所有空格处拆分 a 。然而,结果范围应将其元素转换为std::string_view
s。我正在为范围的“元素类型”而苦苦挣扎。我猜,类型类似于c_str
. 如何将“拆分”部分转换为string_view
s?
c++ - 使用 range-v3 视图实现 begin()/end() 方法
是否可以在类内部使用视图来实现 begin() / end() 方法?
例如,我想让以下类可迭代;在每次迭代时,都会
op
在两个可迭代对象的当前元素上调用。
感谢 range-v3,我可以使用zip_with
视图(代码未经测试!)
但是我可以使用这个视图实现 begin() / end() 方法吗?
可以安全地比较两个迭代器(开始和结束)吗?
我想要实现的最终结果是可以嵌套任意数量的 binary_op: