C++ STL算法库怎么用?C++常用算法函数(sort, find)教程【效率提升】
技术百科
裘德小鎮的故事
发布时间:2026-01-01
浏览: 次 STL算法库是作用于容器的通用函数,不管理内存;sort需传入起始和结束迭代器,默认升序,支持greater()降序及lambda自定义规则。
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 循环就能干很多事:
-
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 算法不难,关键是记住“它只认迭代器范围”,别传容器,也别漏写头文件(、 等)。用熟之后,代码更短、意图更明、出错更少。
# 第一个
# 已有
# 自定义
# 要用
# 迭代
# 作用于
# 仅限
# auto
# go
# 循环
# c++
# String
# if
# int
# 字符串
# 排列
# 成员函数
# 算法
# for
# count
# Lambda
# const
# transform
# sort
# 只对
# copy
# Array
# 升序
# 降序
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- 如何在Golang中定义接口_抽象方法和多态实现
- Win11无法安装软件怎么办_Win11解除应用安
- Win11声音忽大忽小怎么办 Win11音频增强功
- Win11如何开启telnet服务 Win11启用
- 微信企业付款回调PHP怎么接收_处理企业付款异步通
- 如何提升Golang程序I/O性能_Golang
- Win11怎么查看局域网电脑_Windows 11
- Win11怎么关闭VBS安全性_Windows11
- Win11怎么更改管理员名字 Win11修改账户名
- Win11怎么关闭系统推荐内容_Windows11
- Win11如何更改任务栏颜色 Win11自定义任务
- Python函数接口稳定性_版本演进解析【指导】
- Windows Defender扫描失败怎么办_安
- Python爬虫项目实战教程_Scrapy抓取与存
- c++20的std::format怎么用 比pri
- c++ std::future和std::prom
- Windows10如何删除Windows.old_
- MAC如何修改默认应用程序_MAC文件后缀关联设置
- Windows10电脑怎么查看硬盘通电时间_Win
- Python性能剖析高级教程_cProfileLi
- Win11文件扩展名怎么显示_Win11查看文件后
- mac怎么右键_MAC鼠标右键设置与触控板手势技巧
- 如何优化Golang Web性能_Golang H
- php订单日志怎么按状态筛选_php筛选不同状态订
- 如何使用Golang reflect检查方法数量_
- Win11怎么关闭OneDrive同步_Win11
- win11 OneDrive怎么彻底关闭 Win1
- c++怎么使用std::unique实现去重_c+
- Win11怎么关闭系统声音_Win11系统提示音静
- 如何在 Go 中正确初始化结构体中的 map 字段
- php嵌入式多设备通信怎么实现_php同时管理多个
- Win10如何优化内存使用_Win10内存优化技巧
- Win11怎么关闭自动更新 Win11永久关闭系统
- 如何在Golang中实现基础配置管理功能_Gola
- MAC怎么使用表情符号面板_MAC Emoji快捷
- php增删改查报错1054怎么办_字段名错误排查修
- 如何在Golang中使用log包输出不同级别日志_
- 如何在Golang中编写异步函数测试_Golang
- LINUX如何删除用户和用户组_Linux use
- Win11怎么设置默认邮件客户端 Win11修改M
- mac怎么安装pip_MAC Python pip
- Win11怎么关闭用户账户控制UAC_Window
- PHP中require语句后直接调用返回对象方法的
- Python类装饰器使用_元编程解析【教程】
- php8.4如何调用com组件_php8.4win
- Win11如何设置省电模式 Win11开启电池节电
- Mac怎么查看活动监视器_理解Mac进程和资源占用
- Python邮件系统自动化教程_批量发送解析与模板
- Windows蓝屏错误0x00000023怎么修复
- C++如何解析JSON数据?(nlohmann/j

现次数,比如
QQ客服