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

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

1. 查找类函数

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

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

// 示例:查找和计数

#include #include #include 

std::vector nums = {1, 3, 5, 7, 5, 9};

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

auto it = std::find(nums.begin(), nums.end(), 5);if (it != nums.end()) {std::cout << "找到元素,位置:" << it - nums.begin() << "n";}

int cnt = std::count(nums.begin(), nums.end(), 5);std::cout << "数字5出现次数:" << cnt << "n";

auto even = std::find_if(nums.begin(), nums.end(), [](int x) { return x % 2 == 0; });if (even == nums.end()) {std::cout << "没有偶数n";}

2. 排序与相关操作

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

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

// 示例:排序与去重

std::vector data = {5, 2, 8, 2, 1, 5, 9};

std::sort(data.begin(), data.end());// 结果:{1,2,2,5,5,8,9}

std::reverse(data.begin(), data.end());// 结果:{9,8,5,5,2,2,1}

// 去重auto last = std::unique(data.begin(), data.end());data.erase(last, data.end());// 结果:{9,8,5,2,1}

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 vec(5);std::fill(vec.begin(), vec.end(), 7);  // 全部设为7

std::vector src = {1, 2, 3, 4};std::vector dst(4);std::transform(src.begin(), src.end(), dst.begin(), [](int x) { return x * x; });// dst 变为 {1,4,9,16}

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 a = {1,2,3}, b = {1,2,3};if (std::equal(a.begin(), a.end(), b.begin())) {    std::cout << "a 和 b 相等n";}

std::vector text = {1,2,3,4,5};std::vector 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";}

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1480244.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 04:28:00
下一篇 2025年12月19日 04:28:14

相关推荐

发表回复

登录后才能评论
关注微信