📜  C++ STL-algorithm.replace_if()函数(1)

📅  最后修改于: 2023-12-03 14:59:45.532000             🧑  作者: Mango

C++ STL-algorithm.replace_if()函数介绍

replace_if()函数定义

C++ STL(标准模板库)中的algorithm头文件中提供了replace_if()函数,其定义如下:

template<class ForwardIt, class UnaryPredicate, class T>
void replace_if(ForwardIt first, ForwardIt last, UnaryPredicate p, const T& new_value);
  • ForwardIt:表示迭代器类型,指向容器中第一个元素的迭代器。
  • UnaryPredicate:表示谓词(一元函数对象)类型,接受一个参数并返回bool值的函数或函数对象。
  • T:表示新值的类型,将要替换指定元素的新值。
  • first:表示容器中第一个需要替换的元素。
  • last:表示容器中最后一个需要替换的元素(不包含这个迭代器指向的元素)。
  • p:表示谓词函数对象,指定需要替换的元素。
  • new_value:表示新的值,需要用来替换指定元素的值。

replace_if()函数功能

replace_if()函数用于将满足谓词p的元素在[first,last)区间内替换为new_value。其中,new_value表示新值。replace_if()函数按照以下步骤执行:

  1. 从first到last迭代器遍历容器中的元素,找到第一个满足p的元素。
  2. 如果找到了满足p的元素,就将它替换为new_value,并继续遍历容器中的元素,查找下一个满足p的元素。
  3. 如果找到了下一个满足p的元素,就将它替换为new_value,并继续遍历容器中的元素,查找下一个满足p的元素。
  4. 直到遍历完[first,last)区间内的所有元素。

replace_if()函数使用示例

下面是一个示例程序,演示了使用replace_if()函数将vector容器中大于3的元素替换为0。

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

int main() {
    std::vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9};
    
    std::replace_if(v.begin(), v.end(), [](int i){ return i > 3; }, 0);
    
    for(auto i : v) {
        std::cout << i << ' ';
    }
    std::cout << std::endl;

    return 0;
}

输出结果为:

1 2 3 0 0 0 0 0 0

总结

replace_if()函数是C++ STL中的一个实用函数,可用于将容器中满足特定条件的元素替换为新的值。使用起来非常方便,同时也能提高程序的代码质量。