对迭代器上运行的函数的每容器优化

时间:2015-04-30 22:49:06

标签: c++

所以我知道迭代器的意思是抽象底层容器,所以你不必担心它是什么。 但是,如果基础容器是链接列表,则表示您希望编写合并排序的优化版本并希望进行就地排序,因为您可以在链接列表上就地运行合并排序而无需额外的容器分配。

有没有办法让这些信息知道您是否在链接结构上操作和/或访问标准库和其他容器的指针?

我假设有一种方法,因为那是std::sort does?怎么样?

1 个答案:

答案 0 :(得分:3)

我也一直希望有办法做到这一点,但答案是好的,但不是真的。由于模板扣除规则,这通常是不可能的。 每个迭代器可能是一个类的成员,但由于多个类可能具有相同的迭代器,如果函数接收到这些迭代器,从字面上和理论上讲,它不可能推断出它来自哪个容器。这有点阻碍事情。

如果您不需要容器类型并且可以单独使用迭代器类型,那么是的,std::sort可以基于底层容器进行优化。但是,不,std::sort在我知道的任何C ++标准库中都没有基于节点的容器的特殊算法。

容器本身有时会有专门版本,请参阅std::list<T>::sort,但通用std::sort无法使用它,因为它适用于任意范围,std::list<T>::sort仅适用于整个容器。

<小时/> 我真的希望他们愿意。在基于树的容器上调用std::lower_bound和类似的特殊化也很棒。