c++ - 为什么 STL 算法明确需要两个迭代器?
问题描述
C++ STL 中的一些算法需要明确指定两个迭代器。例如,排序 astd::vector<T> v
是用 完成的std::sort(v.begin(), v.end())
。由于处理整个容器(例如,使用std::sort
、std::find
等)是一种相当普遍的情况,我想知道为什么没有实现只接受容器的这些算法的简单版本。我的意思是std::sort(v)
,默认情况下使用v.begin()
和v.end()
迭代器。
是否有一些我不知道的潜在技术原因?先感谢您。
解决方案
我想知道为什么没有实现只接受容器的这些算法的简单版本。
在 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
推荐阅读
- r - 将整个代码存储在操作按钮中
- java - Spring @Autowired 是否为每个 bean 创建新的参数实例?
- html - 使 div 可滚动是内容超过视口的高度
- django - django-sass-processor:加载 sass_tags 并加载静态
- email - 通过另一个 SMTP 服务器问题从 Gmail 发送邮件
- c# - 如何使用 asp.net-mvc 应用程序使用 python 机器学习模型脚本
- c# - 使用滑动控件播放动画和 transform.position 问题 Unity
- c# - 有没有办法在对话更新中快速选择并告诉选择会做什么?
- angular - 如何只生成 API 的接口?
- android - 安卓。前台服务总是停止