C++ STL算法系列6---copy函數

 

如今咱們來看看變易算法。所謂變易算法(Mutating algorithms)就是一組可以修改容器元素數據的模板函數,可進行序列數據的複製,變換等。ios

咱們如今來看看第一個變易算法:元素複製算法copy。該算法主要用於容器之間元素的拷貝,即將迭代器區間[first,last)的元素複製到由複製目 標result給定的區間[result,result+(last-first))中。下面咱們來看看它的函數原型:算法

1     template<class InputIterator, class OutputIterator>  
2        OutputIterator copy(  
3           InputIterator _First,   
4           InputIterator _Last,   
5           OutputIterator _DestBeg  
6        );  

參數

_First, _Last
指出被複制的元素的區間範圍[ _First,_Last).
_DestBeg 
指出複製到的目標區間起始位置

返回值

返回一個迭代器,指出已被複制元素區間的最後一個位置數組

程序示例:函數

首先咱們來一個簡單的示例,定義一個簡單的整形數組myints,將其全部元素複製到容器myvector中,並將數組向左移動一位。spa

複製代碼
 1 #include <iostream>  
 2 #include <algorithm>  
 3 #include <vector>  
 4   
 5 using namespace std;  
 6   
 7 int main ()   
 8 {  
 9     int myints[] = {10, 20, 30, 40, 50, 60, 70};  
10     vector<int> myvector;  
11     vector<int>::iterator it;  
12       
13     myvector.resize(7);   // 爲容器myvector分配空間  
14       
15     //copy用法一:  
16     //將數組myints中的七個元素複製到myvector容器中  
17     copy ( myints, myints+7, myvector.begin() );  
18       
19     cout << "myvector contains: ";  
20     for ( it = myvector.begin();  it != myvector.end();  ++it )  
21     {  
22         cout << " " << *it;  
23     }  
24     cout << endl;  
25   
26     //copy用法二:  
27     //將數組myints中的元素向左移動一位  
28     copy(myints + 1, myints + 7, myints);  
29   
30     cout << "myints contains: ";  
31     for ( size_t i = 0; i < 7; ++i )  
32     {  
33         cout << " " << myints[i];  
34     }  
35     cout << endl;  
36   
37     return 0;  
38 }  
複製代碼

從上例中咱們看出copy算法能夠很簡單地將一個容器裏面的元素複製至另外一個目標容器中,上例中代碼特別要注意一點就是myvector.resize(7);這行代碼,在這裏必定要先爲vector分配空間,不然程序會崩,這是初學者常常犯的一個錯誤。其實copy函數最大的威力是結合標準輸入輸出迭代器的時候,咱們經過下面這個示例就能夠看出它的威力了。.net

複製代碼
 1 #include <iostream>  
 2 #include <algorithm>  
 3 #include <vector>  
 4 #include <iterator>  
 5 #include <string>  
 6   
 7 using namespace std;  
 8   
 9 int main ()   
10 {  
11      typedef vector<int> IntVector;  
12      typedef istream_iterator<int> IstreamItr;  
13      typedef ostream_iterator<int> OstreamItr;  
14      typedef back_insert_iterator< IntVector > BackInsItr;  
15    
16      IntVector myvector;  
17   
18      // 從標準輸入設備讀入整數  
19      // 直到輸入的是非整型數據爲止 請輸入整數序列,按任意非數字鍵並回車結束輸入  
20      cout << "Please input element:" << endl;  
21      copy(IstreamItr(cin), IstreamItr(), BackInsItr(myvector));  
22   
23      //輸出容器裏的全部元素,元素之間用空格隔開  
24      cout << "Output : " << endl;  
25      copy(myvector.begin(), myvector.end(), OstreamItr(cout, " "));   
26      cout << endl;  
27   
28     return 0;  
29 }  
複製代碼

來源:http://blog.csdn.net/jerryjbiao/article/details/7376088code

相關文章
相關標籤/搜索