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

在C++标准模板库(STL)中,replace 和 replace_if 是两个用于容器元素替换的算法,定义在
replace:按值替换
函数 replace 用于将区间内所有等于某个特定值的元素替换为另一个值。
函数原型如下:
templatevoid replace(ForwardIt first, ForwardIt last,
const T& old_val, const T& new_val);
参数说明:
- first, last:表示操作的元素范围 [first, last)
- old_val:要被替换的原始值
- new_val:用于替换的新值
示例:
立即学习“C++免费学习笔记(深入)”;
#include#include
#include iostream>
int main() {
std::vector
std::replace(vec.begin(), vec.end(), 2, 99);
for (int n : vec) std::cout // 输出:1 99 3 99 4 99
}
replace_if:按条件替换
函数 replace_if 更加灵活,它根据用户提供的条件(谓词)来决定是否替换元素。
函数原型如下:
templatevoid replace_if(ForwardIt first, ForwardIt last,
UnaryPredicate p, const T& new_val);
参数说明:
- first, last:操作范围
- p:一元谓词,返回 bool,用于判断元素是否满足替换条件
- new_val:替换后的新值
示例:将所有偶数替换为 0
#include#include
#include
int main() {
std::vector
std::replace_if(vec.begin(), vec.end(),
[](int n) { return n % 2 == 0; }, 0);
for (int n : vec) std::cout // 输出:1 0 3 0 5 0
}
使用要点
这两个算法适用于所有支持迭代器的 STL 容器,如 vector、list、deque 等。
注意点:
- 不会改变容器大小,只是修改元素值
- 谓词可以是函数指针、函数对象或 lambda 表达式
- 替换操作是就地完成的,无额外容器开销
- 时间复杂度为 O(n),遍历一次区间
基本上就这些。replace 和 replace_if 提供了简洁安全的批量替换方式,避免手动写循环,提升代码可读性和可靠性。合理使用谓词还能实现复杂逻辑的替换。不复杂但容易忽略。









