C++ 为什么不是';在带有迭代器参数的标准库函数中是否提供了重载?

C++ 为什么不是';在带有迭代器参数的标准库函数中是否提供了重载?,c++,algorithm,c++11,iterator,range,C++,Algorithm,C++11,Iterator,Range,标准库中有许多函数的结构如下: std::foo(begin(x), end(x), bar); 让我烦恼的是,99%的时间里,争论都是开始和结束。为什么这些函数不都有重载,这些重载肯定会被更频繁地使用,比如: std::foo(x, bar); 这是语言或设计限制还是疏忽?谢谢。看看赫伯·萨特的老专栏 问题是如果你已经有了 template<class Iter> std::sort(Iter, Iter) // (1) template&l

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

std::foo(begin(x), end(x), bar);
让我烦恼的是,99%的时间里,争论都是开始和结束。为什么这些函数不都有重载,这些重载肯定会被更频繁地使用,比如:

std::foo(x, bar);

这是语言或设计限制还是疏忽?谢谢。

看看赫伯·萨特的老专栏

问题是如果你已经有了

template<class Iter>             std::sort(Iter, Iter)       // (1)
template<class Iter, class Pred> std::sort(Iter, Iter, Pred) // (2)
模板std::sort(Iter,Iter)/(1)
模板std::排序(Iter、Iter、Pred)/(2)
然后介绍

template<class Container>             std::sort(Container)       // (3)
template<class Container, class Pred> std::sort(Container, Pred) // (4)
模板std::排序(容器)/(3)
模板std::排序(容器,Pred)/(4)
使C++98容器很难区分(1)和(4):只需将
迭代器
常量迭代器
传递给
sort()
,重载解析可以匹配(4)而不是(1)


用C++ 11和sFIAE,应该可以解决这些问题,但是完全改写可能要等到C++标准委员会完全解决。

你自己为什么不写这种方法?标准库为您提供了通用版本——如果您想要一个方便的重载,请放纵自己。您已经可以使用Boost.Range来实现这一点,但不久标准可能会获得实际范围。Boost和许多库中已经存在的很多内容早就应该在标准中了。。其中一些便利就是人们使用Java和C的原因。。因为.Net和Java库已经提供了易于使用的函数。。例如,正在加载图像,等等。。不需要外部库或编写包装器。。是的,OP,是的,他们可以用不同的方式制作很多模板,让事情变得简单。。但我认为,如果没有他们的意见作为标准的答案或借口,任何人都无法告诉你为什么。。C++是我的FAWL Lang-To…无论如何,OP,我能想出的最好的意见和借口是它与C风格数组的向后兼容性。对于其中一些函数,可以将指针传递到数组的开头和结尾。。然而,如果它的模板设置不同,并且访问了container.begin和container.end,则C样式的数组可能无法使用它。。示例:
std::min(&CArray[0],&CArray[some_size])我问了这个问题,答案是: