c++11 - 基于范围的算法是否可以完全独立于(但针对任何)容器类型进行优化?

标签 c++11 boost-range range-v3

我想知道 boost::rangerange_v3 是否会以与 std::begin 类似的方式协调自由函数和成员函数协调 STL 容器和类似 C 的数组(我的意思是编码通用性)?

更具体地说,对我来说,在一个列表上调用 std::sort 会很方便,该列表自动调用 std::list::sort 给出的最佳可能实现.

最后,成员函数是否可以被视为其泛型的接口(interface) 仅对应项(std::list::sort 从未在客户端代码中调用)?

最佳答案

据我所知,您提到的两个库都没有直接处理这个问题。 C++17 中提倡更普遍地处理此类事情,包括 proposal使 f(x)x.f() 等效,但正如我在上面的评论中提到的,我不清楚它是否适用于 range-v3 的算法。

我确实注意到 range-v3 的 sort.hpp 中有一个有趣的注释://TODO 前向迭代器,如 EoP?。因此,也许尼伯勒确实有支持更通用的排序的想法。 (“EoP”是 Alex Stepanov 的编程元素。)

一个复杂之处:通用排序使用迭代器对值重新排序,而 list::sort() 对链接本身重新排序。如果您关心排序后迭代器指向什么,那么这种区别很重要,因此您仍然需要一种方法来选择所需的排序。考虑到不同的语义,人们甚至可能会争辩说 sort() 永远不应该调用 list::sort()。

关于c++11 - 基于范围的算法是否可以完全独立于(但针对任何)容器类型进行优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31815139/

相关文章:

c++ - 为什么 `accumulate` 没有进入 C++20 的范围?

c++ - 是否有 ranges::view::transform 的可修改 View 版本?

c++ - 为什么通过复制捕获的lambda具有与外部变量相同的地址

c++ - 通过具有可变参数列表的函数计算欧氏距离

c++ - 如何使用 boost::adaptors 链的 boost 范围获取 std::list

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

c++ - Range-v3 View 组合和 View 计算并行化

c++ - 对象的代理,适当的 const 限定和缺乏

c++ - 在 boost::heap::priority_queue 中推送结构对象时出错

c++ - 使用 gcov 忽略或排除外部库中的代码