copy、copy_backward和copy_if的差異

說明:本文僅供學習交流,轉載請標明出處。歡迎轉載!css

        copy,copy_backward和copy_if是幾種常用的泛型算法,這三個函數包括在頭文件#include<algorithm>中,如下縣給出三種函數的原型,再說明三者的差異。html

       函數原型ios

        copy(b,e,b1)。當中b,e,b1都表示迭代器類型;算法

        copy_backward(b,e,b1),當中b,e,b1都表示迭代器;函數

        copy_if(b,e,b1,pre),b,e,b1是迭代器類型。pre則是bool類型;post

        三者的差異學習

        copy(b,e,b1):將迭代器範圍[b,e)的元素拷貝到以b1爲起點(begin)的位置spa

        copy_backward(b,e,b1):將迭代器範圍[b,e)的元素拷貝到以b1爲終點(end)的位置;調試

        copy_if(b,e,b1,pre):將迭代器範圍[b,e)中使得pre爲真的元素拷貝到以b1爲起點的位置。即僅僅將知足條件的元素拷貝到以b1爲起點的位置。code

        爲了更加明顯的說明其差異,如下咱們給出代碼和執行結果:

#include<iostream>
#include<vector>
#include<iterator>//用到幾種迭代器
#include<algorithm>//用到幾個泛型算法
using namespace std;

typedef vector<int> vInt;
void print(const vInt & v)//輸出容器內的元素
{
	int i;
	for(i=0;i<v.size();i++)
	{
		cout<<v[i]<<" ";
	}
	cout<<endl;
}

void reset(vInt &v)
{
	int i;
	for (i=0;i<v.size();i++)
	{
		v[i]=0;
	}
}
bool GT5(int i)
{
	return i>=5;
}
int main()
{
	vector<int> v1,v2;
	int i;
	for(i=1;i<10;i++)
	{
		v1.push_back(i);
	}
	cout<<"容器v1的元素爲:";
	print(v1);//輸出v1的內容
	v2.resize(v1.size()+5);//將v2當前的大小設置爲比v1大5
	
	copy(v1.begin(),v1.end(),v2.begin());//調用copy函數
	cout<<endl<<"調用copy後\n容器v2的元素爲:";
    print(v2);//輸出v2的內容:1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0

	reset(v2);
	copy_backward(v1.begin(),v1.end(),v2.end());//調用copy_backward函數
	cout<<endl<<"調用copy_backward後\n容器v2的元素爲:";
	print(v2);//再輸出v2的內容:0 0 0 0 0 0 1 2 3 4 5 6 7 8 9

	reset(v2);
	copy_if(v1.begin(),v1.end(),v2.begin(),GT5);//調用copy_if函數
	cout<<endl<<"調用copy_if後\n容器v2的元素爲:";
	print(v2);//輸出v2的內容:5 6 7 8 9 0 0 0 0 0 0 0 0 0 0 
	return 0;
}

        以上代碼在VS2010上調試經過。但是由於VC6.0過老,上面的函數copy_if不能編譯,因此建議使用VS或其它叫新的編譯器來編譯本程序,程序結果例如如下:

        

相關文章
相關標籤/搜索