问题标签 [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.
sorting - 对 Range-v3 压缩容器进行排序 - 我可以解压缩吗?
是否可以使用 C++ Range-v3 库解压缩以前压缩的向量?我希望它的行为类似于 Haskell 的unzip函数或 Python 的zip(*list)。
例如,当按另一个向量的值对向量进行排序时,这会很方便:
c++ - 如何为 random_shuffle 编写 range-v3 动作?
使用range-v3 库(由@EricNiebler 编写),使编写算法代码更加紧凑,例如,这里是如何生成一堆随机数:
但是,我更愿意用这样的假设来扩展action::random_shuffle()
管道
这是我编写这样一个动作的尝试(不幸的是,编写新的 range-v3 代码比使用库要冗长得多)
无法编译的实时示例operator()
,因为没有找到一些深藏在某处的东西。
据我所知,我忠实地从类似代码中翻译了上述代码,例如action::sort()
. 唯一的区别是random_shuffle()
有两个重载(一个采用随机生成器),而所有其他动作(包括sort
)都有一个重载,其额外参数(比较器、谓词、投影仪等)具有默认值。这转化为上面的两个bind()
静态成员函数random_shuffle_fn
,而所有其他操作只有一个bind()
重载。
问题:如何为 random_shuffle 编写 range-v3 动作?
c++ - Range-v3:使用 view_facade 提供 const 和 non-const 迭代器
我在使用 view_facade (来自range-v3)创建提供 const 和非常量访问的视图时遇到问题。例如,我尝试修改 view_facade 测试(在 test/view_facade.cpp 中)以允许非 const 访问(默认情况下它只允许 const 访问):
这适用于 begin_cursor 和 end_cursor 的 const 重载注释掉。但是,如果我重新添加这些重载,则会在指示的行(GCC 5.1)上生成以下错误:
似乎在选择 const 版本,给了我一个 const 迭代器。我想要的是:用于 const 对象的 const 迭代器,以及用于非 const 对象的非 const 迭代器。我怎样才能做到这一点?
c++11 - 基于范围的算法能否完全独立于(但针对任何)容器类型进行了优化?
我想知道boost::range或range_v3是否会以类似于std::begin协调 STL 容器和类 C 数组的方式协调自由函数和成员函数(我的意思是在编码通用性方面)?
更具体地说,在自动调用std::list::sort给出的最佳实现的列表上调用std::sort对我来说会很方便。
最后,成员函数是否只能被视为其通用对应项的接口(std::list::sort从未在客户端代码中调用)?
c++ - 算法可以与表达式模板兼容吗?
假设我有一些基于数组的代码可供表达式模板使用。例如,我operator[]
对这些数组进行了重载,并且还重载了算术运算符+
等。
现在我想让 STL 算法any_of
在这样的数组上运行。简单的方法是做
当然,我希望能够缩短计算并进行修改(基于范围lib::any_of
)
lib::any_of
在其输入上写入operator[]
将完成这项工作,就像为重载 . 所做的一样operator+
。但是,这需要对我可能在此类数组上运行的所有 STL 算法进行类似的重新实现。
问题:所以假设我想通过仅修改ExprArray iterators
. 是否可以修改ExprArray
迭代器operator*
并且operator++
以对基于范围的算法透明的方式进行?
因此,如果算法版本实际上是根据迭代器实现的,则循环for (auto it = first; it != last; ++it)
需要*it
知道它需要计算的事实b[i] + c[i]
,并且++it
必须知道它需要做的事实++i
。
c++ - 根据转换后的值查找最小元素
这是来自代码审查的任务。我想根据一种特殊的比较谓词从一组中选择一个最小值。像这样:
在这里,我找到了基于谓词的最小元素。这个谓词计算两个值的减少float
,然后比较这些浮点数。工作正常,看起来很整洁。
你能看出问题吗?是的,一组N
元素calcReduction()
被称为2N
时间,而只计算N
一次就足够了——每个元素一次。
解决此问题的一种方法是编写显式计算:
它工作正常,我们只有N
调用calcReduction()
. 但是,与显式调用min_element
. 因为当你打电话min_element
时很容易猜到你会找到一个最小元素,你知道的。
我现在唯一的想法是创建自己的算法min_element_with_reduction
,例如接受范围和归约函数。听起来很合理,但我想知道是否有现成的解决方案。
关于如何以明确的意图和一些现成的解决方案解决此任务的任何想法?欢迎提升。C++17 和范围很有趣。
c++ - C++ Range-V3 将音频流划分为块
我正在读取一个 wav 文件,最后将数据推送到 std::array 中。我需要对数据块进行一些操作。所以我认为这是学习 Eric Niebler 范围的好机会。
我在“自定义范围”部分下的手册页中看到了 view_facade,但我看到了这个问题:link。现在我不确定如何制作自定义范围类。有人可以帮我吗?下面的代码显示了我想要实现的目标。
部分编译输出:
- - - - - - 更新 - - - - - - - - - - - - - - - - - - - ------
如果我添加 CONFIG += c++14 代码几乎可以编译,除了下面的自动返回类型推断错误:
main.cpp:22:推导的返回类型仅适用于 -std=c++1y 或 -std=gnu++1y
为了避免这些错误,我使用了 CONFIG += c++1y。但在这种情况下,我收到了一堆我首先发布的错误。我从 D 语言中知道所谓的“伏地魔类型”很重要,我不想放弃返回类型推导。我应该使用 gcc 中的哪个标志?
visual-studio - 在 Windows 上使用 range-v3 库有哪些选项?
range-v3库不使用 Visual Studio 2015 Update 1 构建。在 Windows 上使用 Visual Studio(例如 Intel C++、Clang 3.7 和 Microsoft CodeGen)或其他一些 IDE 构建它有哪些选项?
c++ - 如何为 range-v3 创建自定义容器
我了解如何使用创建自己的 range-v3视图view-facade
,但现在我想创建自己的容器,以便可以使用就地变异actions
:
不幸的是,似乎没有像 a 这样的简单助手,container-facade
而且我的 C++ 技能还不足以通过阅读来理解 range-v3 源代码。我的容器需要实现哪个接口,或者它需要从什么派生?
感谢您的任何提示!