C++ 算法 copy_if()函数

C++ 算法 copy_if()函数

C++算法copy_if()函数用于将容器[first,last]中的元素复制到从result开始的另一个容器中,其中的pred的值为true。

语法

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

参数

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

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

result :它是新容器的第一个元素的输出迭代器,用于复制元素。

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

返回值

返回一个迭代器,它指向以结果为开头的新范围的最后一个元素。

示例1

#include<iostream>
#include<algorithm>
#include<vector>
int main()
{
    std::vector<int> a = {20,10, 4,-4,-10};
    std::vector<int> 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<<" "<<x;
    std::cout<<"\n";
    return 0;
}

输出:

b contains: 20 10 4

示例2

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
    vector<int> u1={2,6,7,4,9,4};
    vector<int> 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<u2.size(); k++)
    cout<<u2[k]<<" ";
}

输出:

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

复杂度

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

数据竞争

访问了部分或全部的容器对象。

异常

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程