首页 > 解决方案 > 为什么 STL 算法明确需要两个迭代器?

问题描述

C++ STL 中的一些算法需要明确指定两个迭代器。例如,排序 astd::vector<T> v是用 完成的std::sort(v.begin(), v.end())。由于处理整个容器(例如,使用std::sortstd::find等)是一种相当普遍的情况,我想知道为什么没有实现只接受容器的这些算法的简单版本。我的意思是std::sort(v),默认情况下使用v.begin()v.end()迭代器。

是否有一些我不知道的潜在技术原因?先感谢您。

标签: c++user-interfacestl

解决方案


我想知道为什么没有实现只接受容器的这些算法的简单版本。

在 C++20 中,它有std::ranges版本。

是否有一些我不知道的潜在技术原因?

有点。最初提出算法时<algorithm>,可以区分模板中的不同情况,但相当笨拙。

您如何从呼叫站点中区分这些模板中的哪一个?

template <typename InIt, typename OutIt, typename Func>
OutIt transform(InIt, InIt, OutIt, Func); // unary transform on iterator

template <typename Lhs, typename Rhs, typename OutIt, typename Func>
OutIt transform(Lhs, Rhs, OutIt, Func); // binary transform on containers

推荐阅读