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)
它是语言或设计限制还是疏忽?谢谢.
看看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_iterator向sort()和重载解析可以匹配(4)代替(1).
使用C++ 11和SFINAE,应该可以解决大多数这些问题,但完全重写可能需要等到C++标准委员会完全解决了概念和范围.