C++ STL算法库怎么用?C++常用算法函数(sort, find)教程【效率提升】

17次阅读

STL算法库是作用于容器的通用函数,不管理内存;sort需传入起始和结束迭代器,默认升序,支持greater()降序及Lambda自定义规则。

C++ STL算法库怎么用?C++常用算法函数(sort, find)教程【效率提升】

STL算法库不是容器,而是作用于容器的一组通用函数——它们不管理内存,只操作已有数据,用对了能省下大量手写循环的功夫。

sort:排序要传迭代器,别传整个容器

sort需要两个迭代器(起点和终点),不是容器本身。默认升序,支持自定义比较逻辑。

  • 基本用法:sort(v.begin(), v.end()); —— 对 vector 升序排列
  • 降序:sort(v.begin(), v.end(), greater());
  • 自定义规则(比如按字符串长度):sort(vs.begin(), vs.end(), [](const String& a, const string& b) { return a.size()
  • 注意:只对支持随机访问的容器(vector、deque、Array)高效;list 要用 list::sort() 成员函数

find / find_if:找值 or 找满足条件的元素

返回第一个匹配项的迭代器,没找到就返回 end(),务必检查!

  • find(v.begin(), v.end(), 42); —— 找值为 42 的元素
  • find_if(v.begin(), v.end(), [](int x) { return x % 2 == 0; }); —— 找第一个偶数
  • 用法统一:所有算法都靠迭代器范围工作,跟容器类型无关(vector、list、array 都行)
  • 小技巧:配合 std::distance 可转成下标(仅限支持随机访问的迭代器):auto it = find(v.begin(), v.end(), 5); int idx = distance(v.begin(), it);

其他高频实用算法

不用自己写 for 循环就能干很多事:

立即学习C++免费学习笔记(深入)”;

  • count / count_if:统计出现次数,比如 count(v.begin(), v.end(), 0)
  • accumulate(在 中):求和、拼接、自定义折叠:accumulate(v.begin(), v.end(), 0)accumulate(s.begin(), s.end(), string(""), plus())
  • transform:批量转换,比如把 vector 全部平方:transform(v.begin(), v.end(), v.begin(), [](int x) { return x*x; });
  • copy / copy_if:复制带条件,比手写 if+push_back 更清晰

基本上就这些。STL 算法不难,关键是记住“它只认迭代器范围”,别传容器,也别漏写头文件( 等)。用熟之后,代码更短、意图更明、出错更少。

text=ZqhQzanResources