问题标签 [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 回答
186 浏览

c++ - Range-v3 中 Readable 使用的 CommonReference 有什么作用?

我发现这typename gsl::span<const gsl::byte>::const_iterator不满足Readablerange-v3 中的概念。在浏览了这个概念之后,我发现了这个约束:

ranges::common_reference_tconst从 the中删除value_type,然后它们就不一样了。

CommonReference约束是什么意思?为什么要Readable满足他们?

0 投票
3 回答
2704 浏览

c++ - 如何从开始和结束迭代器创建范围?

我有一个具有获取开始和结束迭代器功能的对象:

因为它们没有命名beginand end,所以我不能将我的对象直接传递给 range-v3 中的函数。

是否有一个简单的包装器可以让这个对象与 range-v3 库一起使用?

例如:

0 投票
2 回答
642 浏览

c++ - 为什么范围 v3 算法不能通过管道传输?

似乎范围 v3 中的算法不可链接,即:

...必须写成功能风格:

这是一个设计选择,只有返回新范围/容器的算法/动作是可管道的?

0 投票
1 回答
1362 浏览

c++ - 如何使用 range-v3 将向量转换为新向量?

我来自 C# 世界,在那里我可以编写如下内容:

这允许我获取一个列表,以某种方式对其进行转换,并将结果存储在一个新列表中。

我想在 C++ 中使用做同样的事情。我了解转换是如何工作的,但是是否提供类似的“接收器”方法来计算和收集结果?

我正在寻找类似的东西toVector,它会将结果范围计算为新分配的std::vector.

0 投票
1 回答
184 浏览

c++ - 要求用户制作的容器符合 range-v3

我在徘徊,用户定义的容器与 Range-v3(算法......)一起使用的新要求是什么?

例如,我们需要在标准意义上改变我们的设计(成员类型,成员函数......)?如何遵守 Range-v3 算法的概念?我们需要提供哪些成员函数?迭代器有哪些变化?

迭代器/开始/结束的替代品是什么?

如果有人可以提供规范的容器实现,那就太好了。

Range-v3 带来了哪些新的想法/观念?什么是新的 C++ 编码方式?

0 投票
2 回答
371 浏览

c++ - 如何正确转发 Invocable 类型

我真的很喜欢使用cmcstl2,这是 Ranges TS 的一个实现。我特别喜欢每个 STL 算法的可选投影。Invocable类型像这样被转发(嗯......或不):(min_element.hpp

作为参考:range-v3库是这样实现的:(min_element.hpp

现在我试图理解这两种方法的区别和推理。我为什么要按Invocable值取类型?为什么我不应该对这些类型使用完美转发?

与第一种方法相比,我更了解第二种方法,因为我了解按值获取接收器参数的方法。

0 投票
2 回答
356 浏览

c++ - 为什么 range-v3 yield 需要默认构造函数

我试图理解,出于什么原因,yield 系列函数要求该类是默认可构造的?

在以下示例中,仅当 CNum 具有默认构造函数时,才会编译 vnums1 行。vnums2 行不需要默认构造函数。

我正在使用 Visual Studio 2017 和 Range-V3-VS2015。谢谢!

0 投票
1 回答
828 浏览

c++ - 将范围拆分为重叠范围

我尝试使用 Ranges-V3 库将值容器分割成一系列范围,以便相邻范围共享边界元素。

考虑以下:

我想根据区域是否满足两个标准将范围划分为重叠的子范围:

  1. 元素的值是否为零
  2. or 与一个或多个值为 0 的元素相邻

期望的输出:

我的尝试:

输出:

我不知道该怎么做

  1. “插入”从 3 到 6 的范围
  2. “追加”从 8 到 9 的范围
0 投票
2 回答
575 浏览

c++ - 如何使用 range-v3 逐对转换范围?

我正在编写一个算法来消除重叠,给定一系列线(由于在这种情况下术语“范围”的歧义,我将其称为“线”)。

这是 a 的line样子:

示例:给定三行 (0,3)、(1,2) 和 (5,1),我希望在转换后获得 (0,3)、(3,2) 和 (5,1)。这是此问题的图形表示:

重叠去除

这是该问题的一种可能解决方案:

我的问题:我如何使用 range-v3 来做到这一点?

我正在考虑使用view::chunk(N)增量大小为 1(而不是 N)的修改。但我真的不知道如何从这一点着手。

0 投票
0 回答
82 浏览

c++ - RangeV3:为什么不对特定容器专门化算法?

“旧” STL 不允许 saystd::find专门使用std::setorstd::unordered_map等​​的成员函数。它不能,因为前者使用迭代器,后者需要容器,并且无法从迭代器获取容器。甚至还有一个问题(专业化 STL 算法,以便它们在可用时自动调用有效的容器成员函数)。

由于 Range V3 最终将焦点从迭代器转移到了范围,人们可以期望 finallystd::find会自动专门化为std::set,这反过来又使得std::none_of_equal(如果它被采用)做你想做的事情,等等。

但是,阅读它当前的实现,我看不到这样的功能。为什么?