當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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: 它是範圍最後一個元素的輸入迭代器,其中元素本身不包含在範圍內。

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

複雜度

函數的複雜度從第一個元素到最後一個元素是線性的。

數據競爭

訪問部分或全部容器對象。

異常

如果任何容器元素拋出一個異常,該函數就會拋出異常。






相關用法


注:本文由純淨天空篩選整理自 C++ Algorithm Function copy_if()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。