STL算法大教程:简介
我已经写过不少关于 C++11 引入的新特性以及它们如何改变我对这门语言的看法的文章。我最喜欢的特性大概就是 lambda 表达式了。我喜欢它们并非仅仅因为它们的存在,这并非“艺术至上”,而是因为它们确实能帮助我更好地使用各种 STL 算法。如果你想快速了解这 105 个特性,可以看看fluentcpp.com网站的博主制作的这个视频。
由于 lambda 表达式和 STL 算法的结合,我编写 C++ 代码的方式发生了很大变化。但我知道自己对 STL 的了解还不够深入,我想提升这方面的知识。学习 STL 的最佳方法是什么?是实践还是教学?我已经开始实践了,所以我决定开始撰写一个关于 STL 算法的系列文章。
我还不确定我会多久写一篇关于它们的文章,以及一篇文章会涵盖多少个算法,但我写的每两篇技术文章中就有一篇是关于 STL 算法的——发表顺序是另一个问题。
我们开始吧!
我们将要讨论的算法基本上是一组函数,我们可以很好地与 STL 容器一起使用,另一个共同点是它们都可以在头部找到。
根据cplusplus.com的说法,我们可以将它们分为 8 类以及其他类别:
- 非修改序列操作(例如 all_if、any_of、find)
- 修改序列操作(例如 copy、copy_if、transform)
- 分区(例如 partition、is_partition)
- 排序(例如 sort、is_sorted)
- 二分查找(例如 binary_search、lower_bound、upper_bound)
- 合并(例如 merge、set_union)
- 堆(例如 push_heap、pop_heap)
- 最小值/最大值(例如最小值、最大值……)
- 其他的
有些分组我会在一篇文章中展示,例如最小值/最大值,但有些分组要大得多,例如非修改序列操作,我会将其分解成更小的部分。
敬请关注!
本文最初发表于我的博客。
文章来源:https://dev.to/sandordargo/the-big-stl-algorithms-tutorial-introduction-2kph