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

C++STL算法replace和replace_if实现替换

P粉602998670
发布: 2025-09-11 11:48:03
原创
498人浏览过
replace和replace_if是STL中用于元素替换的算法,replace将范围内等于旧值的元素替换为新值,replace_if根据谓词条件替换元素,二者均就地操作、时间复杂度O(n),适用于支持迭代器的容器,提升代码简洁性与可靠性。

c++stl算法replace和replace_if实现替换

在C++标准模板库(STL)中,replacereplace_if 是两个用于容器元素替换的算法,定义在 <algorithm> 头文件中。它们可以在指定范围内将满足条件的元素替换为新值,无需手动遍历容器。

replace:按值替换

函数 replace 用于将区间内所有等于某个特定值的元素替换为另一个值。

函数原型如下:

template<class ForwardIt, class T>
void replace(ForwardIt first, ForwardIt last,
const T& old_val, const T& new_val);

参数说明:
- first, last:表示操作的元素范围 [first, last)
- old_val:要被替换的原始值
- new_val:用于替换的新值

示例:

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

#include <algorithm>
#include <vector>
#include <iostream>

int main() {
std::vector<int> vec = {1, 2, 3, 2, 4, 2};
std::replace(vec.begin(), vec.end(), 2, 99);

for (int n : vec) std::cout << n << " ";
// 输出:1 99 3 99 4 99
}

replace_if:按条件替换

函数 replace_if 更加灵活,它根据用户提供的条件(谓词)来决定是否替换元素。

算家云
算家云

高效、便捷的人工智能算力服务平台

算家云 37
查看详情 算家云

函数原型如下:

template<class ForwardIt, class UnaryPredicate, class T>
void replace_if(ForwardIt first, ForwardIt last,
UnaryPredicate p, const T& new_val);

参数说明:
- first, last:操作范围
- p:一元谓词,返回 bool,用于判断元素是否满足替换条件
- new_val:替换后的新值

示例:将所有偶数替换为 0

#include <algorithm>
#include <vector>
#include <iostream>

int main() {
std::vector<int> vec = {1, 2, 3, 4, 5, 6};
std::replace_if(vec.begin(), vec.end(),
[](int n) { return n % 2 == 0; }, 0);

for (int n : vec) std::cout << n << " ";
// 输出:1 0 3 0 5 0
}

使用要点

这两个算法适用于所有支持迭代器的 STL 容器,如 vector、list、deque 等。

注意点:
- 不会改变容器大小,只是修改元素值
- 谓词可以是函数指针、函数对象或 lambda 表达式
- 替换操作是就地完成的,无额外容器开销
- 时间复杂度为 O(n),遍历一次区间

基本上就这些。replace 和 replace_if 提供了简洁安全的批量替换方式,避免手动写循环,提升代码可读性和可靠性。合理使用谓词还能实现复杂逻辑的替换。不复杂但容易忽略。

以上就是C++STL算法replace和replace_if实现替换的详细内容,更多请关注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号