C++ copy_if()
C++ 算法函数copy_if()
C++ 算法copy_if()函数用于从结果开始将容器[first,last]的元素复制到不同的容器中, pred的值为true。
语法
template<class InputIterator, class OutputIterator, class UnaryPredicate>
OutputIterator copy_if(InputIterator first, InputIterator last, OutputIterator result,UnaryPredicate pred);
参数
first: 它是范围的第一个元素的输入迭代器,元素本身包含在范围中。
last: 它是范围的last元素的输入迭代器,其中元素本身不包含在范围中。
result: 它是新容器中要复制元素的第一个元素的输出迭代器。
pred : 这是一元函数,它接受一个元素作为参数并检查指定的条件。
返回值
返回从结果开始到新范围last元素的迭代器。
示例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;
}
输出:
示例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
复杂度
该函数的复杂度从第一个元素到last元素都是线性的。
数据竞争
访问某些或所有容器对象。
异常
如果任何容器元素抛出一个异常,该函数将引发异常。