<分区>
标准库中有很多函数的结构如下:
std::foo(begin(x), end(x), bar);
令我困扰的是,99% 的时间里,参数都是开始和结束。为什么这些函数不都具有肯定会更频繁使用的重载,例如:
std::foo(x, bar);
这是语言或设计限制还是疏忽?谢谢。
<分区>
标准库中有很多函数的结构如下:
std::foo(begin(x), end(x), bar);
令我困扰的是,99% 的时间里,参数都是开始和结束。为什么这些函数不都具有肯定会更频繁使用的重载,例如:
std::foo(x, bar);
这是语言或设计限制还是疏忽?谢谢。
最佳答案
看看Herb Sutter的旧专栏"Why no container-based algorithms?"
问题是如果你已经有例如
template<class Iter> std::sort(Iter, Iter) // (1)
template<class Iter, class Pred> std::sort(Iter, Iter, Pred) // (2)
然后介绍
template<class Container> std::sort(Container) // (3)
template<class Container, class Pred> std::sort(Container, Pred) // (4)
让 C++98 容器很难区分 (1) 和 (4):只需将 iterator
和 const_iterator
传递给 sort()
和重载解析可以匹配 (4) 而不是 (1)。
使用 C++11 和 SFINAE 应该可以解决大部分这些问题,但完全重写可能要等到 Concepts。和 Ranges已由 C++ 标准委员会全面制定。
关于c++ - 为什么不在带有迭代器参数的标准库函数中提供重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22417332/
相关文章:
algorithm - 算法描述中的 "straightforward UF"指的是什么?
c++ - noexcept 说明符神秘地破坏了编译(clang,gcc 不同意)
c++ - 有没有办法在 Visual Studio Express '12 项目中编译和运行单个 .cpp 文件?
Python 字典与 C++ 标准 :unordered_map (cython) vs cythonized python dict
c++ - std::reference_wrapper<T> 的隐式 T& 构造函数是否会使使用变得危险?