为什么标准库函数中没有使用迭代器参数提供重载?

Phl*_*das 4 c++ algorithm iterator range c++11

标准库中有许多函数,其结构如下:

std::foo(begin(x), end(x), bar);
Run Code Online (Sandbox Code Playgroud)

令我困扰的是99%的时间,争论的开始和结束.为什么这些函数都没有过多的重载,这些重载肯定会被更频繁地使用:

std::foo(x, bar);
Run Code Online (Sandbox Code Playgroud)

它是语言或设计限制还是疏忽?谢谢.

Tem*_*Rex 5

看看Herb Sutter的旧专栏"为什么没有基于容器的算法?"

问题是如果你已经有了例如

template<class Iter>             std::sort(Iter, Iter)       // (1)
template<class Iter, class Pred> std::sort(Iter, Iter, Pred) // (2)
Run Code Online (Sandbox Code Playgroud)

然后介绍

template<class Container>             std::sort(Container)       // (3)
template<class Container, class Pred> std::sort(Container, Pred) // (4)
Run Code Online (Sandbox Code Playgroud)

给出C++ 98升的容器难以判断(1)从(4):只通过一个iterator和一个const_iteratorsort()和重载解析可以匹配(4)代替(1).

使用C++ 11和SFINAE,应该可以解决大多数这些问题,但完全重写可能需要等到C++标准委员会完全解决了概念范围.