基于范围的算法能否完全独立于(并针对任何)容器类型进行优化?
Could range-based algorithm be fully independent of (and yet optimized for any) container type?
我想知道 boost::range 或 range_v3 是否会以类似的方式协调自由函数和成员函数std::begin 调和 STL 容器和类 C 数组(我指的是编码通用性)?
更具体地说,在自动调用 std::list 给出的最佳实现的列表上调用 std::sort 对我来说会很方便::排序.
最后,成员函数是否可以看作是它们泛型的接口
仅对应方(std::list::sort 从未在客户端代码中调用过)?
AFAIK,您提到的图书馆都没有直接处理这个问题。在 C++17 中有一个更普遍地处理这种事情的推动,包括 proposal 使 f(x)
和 x.f()
等价,但正如我在上面的评论中提到的,我不清楚它是否适用于 range-v3 的算法。
我注意到 range-v3 的 sort.hpp 中有一个有趣的评论:// TODO Forward iterators, like EoP?
。所以,也许 Niebler 确实有想法支持更通用的排序。 ("EoP" 是 Alex Stepanov 的 编程基础。)
一个并发症:通用排序使用迭代器对值重新排序,而 list::sort() 对链接本身重新排序。如果您关心排序后迭代器指向什么,那么区别很重要,因此您仍然需要一种方法来 select 您想要的排序。考虑到不同的语义,人们甚至可以争辩说 sort() 永远不应该调用 list::sort()。
我想知道 boost::range 或 range_v3 是否会以类似的方式协调自由函数和成员函数std::begin 调和 STL 容器和类 C 数组(我指的是编码通用性)?
更具体地说,在自动调用 std::list 给出的最佳实现的列表上调用 std::sort 对我来说会很方便::排序.
最后,成员函数是否可以看作是它们泛型的接口 仅对应方(std::list::sort 从未在客户端代码中调用过)?
AFAIK,您提到的图书馆都没有直接处理这个问题。在 C++17 中有一个更普遍地处理这种事情的推动,包括 proposal 使 f(x)
和 x.f()
等价,但正如我在上面的评论中提到的,我不清楚它是否适用于 range-v3 的算法。
我注意到 range-v3 的 sort.hpp 中有一个有趣的评论:// TODO Forward iterators, like EoP?
。所以,也许 Niebler 确实有想法支持更通用的排序。 ("EoP" 是 Alex Stepanov 的 编程基础。)
一个并发症:通用排序使用迭代器对值重新排序,而 list::sort() 对链接本身重新排序。如果您关心排序后迭代器指向什么,那么区别很重要,因此您仍然需要一种方法来 select 您想要的排序。考虑到不同的语义,人们甚至可以争辩说 sort() 永远不应该调用 list::sort()。