0

0

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

冰火之心

冰火之心

发布时间:2025-10-22 08:44:02

|

1007人浏览过

|

来源于php中文网

原创

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

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 使用)。

// 示例:排序与去重

可赞AI
可赞AI

文字一秒可视化,免费AI办公神器

下载
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 方法。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

198

2023.11.20

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

390

2023.09.04

lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

206

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

191

2025.11.08

Python lambda详解
Python lambda详解

本专题整合了Python lambda函数相关教程,阅读下面的文章了解更多详细内容。

50

2026.01.05

lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

206

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

191

2025.11.08

Python lambda详解
Python lambda详解

本专题整合了Python lambda函数相关教程,阅读下面的文章了解更多详细内容。

50

2026.01.05

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

31

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 4.2万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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