问题标签 [boost-range]

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 回答
748 浏览

c++ - c++ 提升范围:any_range 和转换后的适配器

我正在尝试将使用 boost 转换适配器的 boost 范围包装到 boost any 范围中,但这似乎不起作用。我构建了一个最小的例子来说明。

在发布模式下,我的 VS2015 编译器不断告诉我“返回局部变量或临时地址”。该代码在执行时也无法正确执行。在调试模式下一切都很好。

我认为不知何故any_range无法理解转换后的适配器按值返回,即使我明确地将 Reference 模板参数设置为double而不是 default double&

我在做什么错any_range?(使用提升 1.64.0)

0 投票
1 回答
216 浏览

c++ - 升压范围适配器

在查找算法中使用范围适配器时,我必须重复所有适配器链以获取相应的 end() 迭代器。例如:

有没有办法得到相应的结束迭代器而不必再次重复?

0 投票
1 回答
993 浏览

c++ - 升压范围适配器变平

我看到了如何编写一个扁平化迭代器,但是我怎样才能用一个升压范围适配器做同样的事情呢?

我希望这个工作:

我看过Method 3,但我还不够聪明,无法弄清楚如何应用它。

0 投票
1 回答
946 浏览

c++ - 进行收藏的升压范围适配器

我想编写一个 boost 适配器放在一个适配器链的末尾以创建一个集合,如下所示:

使用方法 3.1我编写了下面的代码,它似乎按预期工作:

但是如果我取消注释那一行,我会得到:

错误 C2338:C++ 标准禁止 const 元素的容器,因为分配器格式错误。

如果我将第一个参数设置operator|&&,那么直到我取消注释该filtered()行,然后我得到:

错误 C2825:“R”:后跟“::”时必须是类或命名空间

这样做的正确方法是什么?

0 投票
2 回答
136 浏览

c++ - 在 boost transform() 之后比较嵌套的迭代器

如果我使用 VS2015 运行此程序_ITERATOR_DEBUG_LEVEL=2,则会在以下位置触发此错误_Compat(const _Myiter& _Right)

这很重要,因为展平迭代器advance_past_empty_inner_containers().

这是怎么回事?我如何解决它?

0 投票
0 回答
644 浏览

c++ - MSVC2017 的升压范围产生未知的覆盖说明符错误

以下程序

使用以下命令行编译:

产生以下错误:

我正在使用使用 MSVC2017(工具集 v141)编译的 Boost 1.64,但我不确定它如何导致这些错误。

第一个错误是在join_iterator.hpp(252)并且该行是

我不明白为什么编译器将dereference其视为覆盖说明符。需要修复什么才能编译?

在尝试了一些变体后,我发现将平台工具集从 v141 切换到 v140(从 VS2015)确实允许程序编译。 在此处输入图像描述

那么这是否意味着这只是一个错误?

0 投票
2 回答
195 浏览

c++ - “使用算法;不要为多步逻辑编写代码?

这个问题让我觉得“根本不要使用显式循环!使用 STL/Boost 算法”,但仔细看,我注意到有一个adjacent_differenceaccumulate并且 Boost 有一个zip地方,

他们根本不堆叠在一起,但每个人只能自己完成一个完整的传球。因此,以直接的方式使用它们将需要许多包含部分结果的中间副本。也就是说,让相邻差异写入一个新向量,它是 zip 等的参数。

现在在“现代”C++ 中,口头禅是我们不应该“编写代码”并且很少需要显式循环。

但我的实际经验更像是这样的案例:要做的事情不是一个简单的步骤,结果也不是像那样批量收集的。

那么,如何一种流线型的方式编写它,指的是要执行的操作,但不是循环遍历范围,也不是显式地拉取每个元素。

Boost 迭代器过滤器通常可以构建更复杂的逻辑,最终在驱动循环内结束(因此中间结果没有整体复制)但是这个示例有几个特性说明了我发现 Boost 范围过滤器的限制!而且设置它比编写for循环更复杂!

所以,如果 C++“名人录”说我们应该能够用新的语言和库特性来编写这种方式,那么您如何在这里做到这一点,一个比他们在讲座中展示的更真实的简单案例?

0 投票
2 回答
1863 浏览

c++ - 如何在 std::unordered_set 上使用 boost::range::adaptors::transformed?

我正在尝试在 std::unordered_set 上使用 boost::adaptors::transformed 但即使在很小的实验中似乎也会产生奇怪的行为。

我在 Ubuntu 16.04 上使用 Boost 1.58.0 和 gcc 5.4.0。

在迭代范围时,不会列出范围初始化后添加的元素:

遵循与其他 std 容器(如 std::list)相同的方案按预期工作,将后者添加的元素加倍。

如果使用以下方法初始化集合,则更奇怪的是:

范围迭代仅给出 '10' 而容器的 '10 0 1 2 3 4 5'

有人能告诉我这个例子有什么问题吗?

0 投票
1 回答
373 浏览

c++ - 实现 Boost 范围适配器 reversed_if

我经常在我的代码中遇到这样的情况,我想根据运行时条件以直接或相反的顺序迭代一个范围。这通常会导致如下代码

或者

其中包含代码重复(第一个)或效率低下(第二个)。

我一直在思考一个假设的 Boost 范围适配器,它可以有条件地反转一个范围,这样我就可以写

我可以自己实现它(从这里开始),但我不确定如何进行。为了支持运行时条件,恐怕我必须在每次迭代时检查一个布尔值以确定迭代方向或使用虚拟性来调度迭代代码。这就是Boost范围适配器中未提供此功能的原因吗?

任何替代解决方案?

0 投票
1 回答
224 浏览

c++ - 是否可以隐藏具有提升范围的底层容器?

我有一个图结构,其中顶点可以有多种类型的边。

顶点类型是多态的,它们必须能够根据它们的类型“分类”边并相应地存储它们,但我希望能够在“基本级别”检索所有边而不知道它们是如何存储的。

我正在尝试使用 boost::adaptors::transformed、boost::range::join 和 boost::any_range 来实现这一点。

一个例子:

这在 getEdges() 评估时给了我段错误。据我了解,any_range 保留对临时变量 boost::adaptors::transformed 的引用。我试图将转换适配器范围保留为类成员变量,但它不起作用。

有没有使用any_range 实现这一目标的正确方法?transform_iterator / any_iterator 类型可以作为答案还是我会面临类似的问题?