首页 > 后端开发 > C++ > 正文

C++的std::algorithm库有哪些常用函数_C++算法库常用函数与示例汇总

冰火之心
发布: 2025-10-22 08:44:02
原创
973人浏览过
C++中std::algorithm库提供高效容器操作算法,定义于<algorithm>头文件,配合迭代器使用。1. 查找类函数:std::find查找首现元素,std::count统计指定值个数,std::find_if查找满足谓词的第一个元素。示例中在vector中找5的位置并计数,用lambda查找偶数。2. 排序与相关操作:std::sort升序排序,std::reverse反转元素,std::is_sorted判断是否有序,std::unique去重(需配合erase)。示例对数据排序、反转并去重。3. 修改型算法:std::copy复制元素,std::fill填充区间,std::replace替换值,std::transform应用操作生成新结果。示例填充7、平方转换。4. 比较与逻辑操作:std::equal判断两区间相等,std::lexicographical_compare字典序比较,std::search查找子序列。示例验证两向量相等并定位子序列。多数算法不改变容器大小,删除需结合erase。掌握这些可提升代码效率与可读性。

c++的std::algorithm库有哪些常用函数_c++算法库常用函数与示例汇总

在C++中,std::algorithm 库提供了大量用于操作容器的通用算法。这些函数定义在 red"><algorithm> 头文件中,配合迭代器使用,能高效完成查找、排序、遍历、修改等任务。下面是一些最常用的函数及其使用示例。

1. 查找类函数

用于在范围内查找特定元素或满足条件的元素。

  • std::find(begin, end, value):在区间 [begin, end) 中查找第一个等于 value 的元素,返回其迭代器,未找到则返回 end。
  • std::count(begin, end, value):统计区间中等于 value 的元素个数。
  • std::find_if(begin, end, pred):查找第一个满足谓词 pred 的元素。

// 示例:查找和计数

#include <algorithm>
#include <vector>
#include <iostream>
<p>std::vector<int> nums = {1, 3, 5, 7, 5, 9};</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/6e7abc4abb9f" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">C++免费学习笔记(深入)</a>”;</p><p>auto it = std::find(nums.begin(), nums.end(), 5);
if (it != nums.end()) {
std::cout << "找到元素,位置:" << it - nums.begin() << "\n";
}</p><p>int cnt = std::count(nums.begin(), nums.end(), 5);
std::cout << "数字5出现次数:" << cnt << "\n";</p><p>auto even = std::find_if(nums.begin(), nums.end(), [](int x) { return x % 2 == 0; });
if (even == nums.end()) {
std::cout << "没有偶数\n";
}</p>
登录后复制

2. 排序与相关操作

对容器中的元素进行排序或判断有序性。

  • std::sort(begin, end):对区间内元素升序排序(可自定义比较函数)。
  • std::reverse(begin, end):反转区间中的元素顺序。
  • std::is_sorted(begin, end):判断是否已排序。
  • std::unique(begin, end):移除相邻重复元素(通常配合 erase 使用)。

// 示例:排序与去重

LuckyCola工具库
LuckyCola工具库

LuckyCola工具库是您工作学习的智能助手,提供一系列AI驱动的工具,旨在为您的生活带来便利与高效。

LuckyCola工具库 19
查看详情 LuckyCola工具库
std::vector<int> data = {5, 2, 8, 2, 1, 5, 9};
<p>std::sort(data.begin(), data.end());
// 结果:{1,2,2,5,5,8,9}</p><p>std::reverse(data.begin(), data.end());
// 结果:{9,8,5,5,2,2,1}</p><p>// 去重
auto last = std::unique(data.begin(), data.end());
data.erase(last, data.end());
// 结果:{9,8,5,2,1}</p>
登录后复制

3. 修改型算法

用于复制、替换、填充等操作。

  • std::copy(src_begin, src_end, dest_begin):复制元素到另一区间。
  • std::fill(begin, end, value):将区间所有元素设为 value。
  • std::replace(begin, end, old_val, new_val):替换指定值。
  • std::transform(begin, end, result, op):对每个元素应用操作并存储结果。

// 示例:填充与转换

std::vector<int> vec(5);
std::fill(vec.begin(), vec.end(), 7);  // 全部设为7
<p>std::vector<int> src = {1, 2, 3, 4};
std::vector<int> dst(4);
std::transform(src.begin(), src.end(), dst.begin(), [](int x) { return x * x; });
// dst 变为 {1,4,9,16}</p>
登录后复制

4. 比较与逻辑操作

判断两个序列是否相等,或是否存在某种关系。

  • std::equal(a_begin, a_end, b_begin):判断两个区间内容是否相等。
  • std::lexicographical_compare(a1, a2, b1, b2):字典序比较。
  • std::search(sub_begin, sub_end, target_begin, target_end):查找子序列。

// 示例:比较与搜索

std::vector<int> a = {1,2,3}, b = {1,2,3};
if (std::equal(a.begin(), a.end(), b.begin())) {
    std::cout << "a 和 b 相等\n";
}
<p>std::vector<int> text = {1,2,3,4,5};
std::vector<int> pattern = {3,4};
auto pos = std::search(text.begin(), text.end(), pattern.begin(), pattern.end());
if (pos != text.end()) {
std::cout << "子序列在位置 " << pos - text.begin() << "\n";
}</p>
登录后复制

基本上就这些常用函数。掌握它们可以大幅提升代码效率和可读性。注意:大多数算法不改变容器大小,如需删除元素,常需配合容器自身的 erase 方法。

以上就是C++的std::algorithm库有哪些常用函数_C++算法库常用函数与示例汇总的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号