所以我知道迭代器的意思是抽象底层容器,所以你不必担心它是什么。 但是,如果基础容器是链接列表,则表示您希望编写合并排序的优化版本并希望进行就地排序,因为您可以在链接列表上就地运行合并排序而无需额外的容器分配。
有没有办法让这些信息知道您是否在链接结构上操作和/或访问标准库和其他容器的指针?
我假设有一种方法,因为那是std::sort does
?怎么样?
答案 0 :(得分:3)
我也一直希望有办法做到这一点,但答案是好的,但不是真的。由于模板扣除规则,这通常是不可能的。 每个迭代器可能是一个类的成员,但由于多个类可能具有相同的迭代器,如果函数接收到这些迭代器,从字面上和理论上讲,它不可能推断出它来自哪个容器。这有点阻碍事情。
如果您不需要容器类型并且可以单独使用迭代器类型,那么是的,std::sort
可以基于底层容器进行优化。但是,不,std::sort
在我知道的任何C ++标准库中都没有基于节点的容器的特殊算法。
容器本身有时会有专门版本,请参阅std::list<T>::sort
,但通用std::sort
无法使用它,因为它适用于任意范围,std::list<T>::sort
仅适用于整个容器。
<小时/> 我真的希望他们愿意。在基于树的容器上调用
std::lower_bound
和类似的特殊化也很棒。