📜  C++ STL-algorithm.copy_if()函数

📅  最后修改于: 2020-10-16 07:58:15             🧑  作者: Mango

C++ STL algorithm函数copy_if()

C++ STL algorithm.copy_if()函数用于将容器[first,last]的元素复制到另一个容器中,该容器从pred值为true的结果开始。

句法

template
OutputIterator copy_if(InputIterator first, InputIterator last, OutputIterator result,UnaryPredicate pred);

参数

first:它是范围的第一个元素的输入迭代器,其中元素本身包含在范围中。

last:它是范围中最后一个元素的输入迭代器,其中元素本身不包含在范围中。

结果:它是新容器中要复制元素的第一个元素的输出迭代器。

pred:这是一个Unary函数,它接受一个元素作为参数并检查指定的条件。

返回值

返回从结果开始到新范围的最后一个元素的迭代器。

例子1

#include
#include
#include
int main()
{
    std::vector a = {20,10, 4,-4,-10};
    std::vector b (a.size());
    auto ti = std::copy_if(a.begin(),a.end(),b.begin(),[](int j){ return !(j<0);});
    b.resize(std::distance(b.begin(),ti));
    std::cout<<"b contains:";
    for (int& x:b) std::cout<<" "<

输出:

b contains: 20 10 4

例子2

#include
#include
#include
using namespace std;
int main()
{
    vector u1={2,6,7,4,9,4};
    vector u2(6);
    copy_if(u1.begin(),  u1.end(), u2.begin(), [](int j){return j%2!=0;});
    cout<<"The new vector using copy_if contains:";
    for(int k=0; k

输出:

The new vector using copy_if contains:7 9 0 0 0 0

复杂度

从第一个元素到最后一个元素,函数的复杂度是线性的。

数据竞争

访问某些或所有容器对象。

异常处理

如果任何容器元素抛出一个异常,该函数将引发异常。