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

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

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

在C++标准模板库(STL)中,replace 和 replace_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:用于替换的新值

示例:

#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 更加灵活,它根据用户提供的条件(谓词)来决定是否替换元素。

PIA PIA

全面的AI聚合平台,一站式访问所有顶级AI模型

PIA226 查看详情 PIA

函数原型如下:

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实现替换的详细内容,更多请关注知识资源分享宝库其它相关文章!

相关标签: go ai c++ ios 代码可读性 red for include const bool int void 循环 Lambda 指针 class 对象 算法 大家都在看: C++如何使用模板实现迭代器类 C++如何处理复合对象中的嵌套元素 C++内存模型与编译器优化理解 C++如何使用ofstream和ifstream组合操作文件 C++循环与算法优化提高程序执行效率

标签:  替换 算法 STL 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。