我想知道 boost::range 或 range_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/