說明:本文僅供學習交流,轉載請標明出處。歡迎轉載!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或其它叫新的編譯器來編譯本程序,程序結果例如如下: