C++ STL 中不同的複製方法 - std::copy()、copy_n()、copy_if()、copy_backwards()


顧名思義,copy() 方法用於透過 C++ STL 中提供的各種方法複製資料。所有方法的功能和引數都不同。這些方法在 <algorithm> 標頭檔案中可用。讓我們討論每種方法及其功能。

Copy(start_i1, end_i1, start_i2)

此方法用於將資料從一個迭代器複製到另一個迭代器,在指定的範圍內,迭代器的起始和結束元素都包含在內。它採用三種類型的引數,即:

  • Start_i1 − 它將指向迭代器的初始元素,例如 i_1,從中將元素複製到另一個迭代器,例如 i_2。

  • End_i1 − 它將指向迭代器的結束元素,例如 i_1,直到將元素複製到另一個迭代器,例如 i_2。

  • Start_i2 − 它將指向迭代器的初始位置,將在此處複製元素,即 i_2。

返回值 − 它將返回指向目標迭代器末尾的迭代器,即 i_2,直到複製元素為止。

示例

 線上演示

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
   //creating vector v1
   vector<int> vec_1 = { 10, 20, 30, 40, 50 };
   //declaring empty vector of size
   vector<int> vec_2(6);
   // using copy() function to copy in vector 2
   copy(vec_1.begin(), vec_1.begin()+4, vec_2.begin());
   //print new vector
   cout<<"Elements in vector v2 copied from v1: ";
   for(int i=0; i<4; i++){
      cout<<vec_2[i] << " ";
   }
}

輸出

此程式碼的輸出將是:

Elements in vector v2 copied from v1: 10 20 30 40

copy_n(start_i1, total, start_i2)

此方法也用於將資料從一個迭代器複製到另一個迭代器,但它告訴編譯器從給定位置開始需要複製多少個元素。它採用三種類型的引數,即:

  • Start_i1 − 它將指向迭代器的初始元素,例如 i_1,從中將元素複製到另一個迭代器,例如 i_2。

  • Total − 它描述了從 start_i1 指定的位置開始將複製多少個元素。它可以接受正整數和負整數,但如果值為負,則不會執行任何操作。

  • Start_i2 − 它將指向迭代器的初始位置,將在此處複製元素,即 i_2。

返回值 − 它將返回指向目標迭代器末尾的迭代器,即 i_2,直到複製元素為止。

示例

 線上演示

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
   //creating vector v1
   vector<int> vec_1 = { 10, 20, 30, 40, 50 };
   //declaring empty vector of size
   vector<int> vec_2(6);
   // using copy_n() function to copy in vector 2
   copy_n(vec_1.begin(), 4, vec_2.begin());
   //print new vector
   cout<<"Elements in vector v2 copied from v1: ";
   for(int i=0; i<4; i++){
      cout<<vec_2[i] << " ";
   }
}

輸出

此程式碼的輸出將是:

Elements in vector v2 copied from v1: 10 20 30 40

copy_if(start_i1, end_i1, start_i2, 布林函式)

此方法用於根據應用於範圍的條件(將在傳遞給此函式的第四個引數中定義)將資料從一個迭代器複製到另一個迭代器。它採用四種類型的引數,即:

  • Start_i1 − 它將指向迭代器的初始元素,例如 i_1,從中將元素複製到另一個迭代器,例如 i_2。

  • End_i1 − 它將指向迭代器的結束元素,例如 i_1,直到將元素複製到另一個迭代器,例如 i_2。

  • Start_i2 − 它將指向迭代器的初始位置,將在此處複製元素,即 i_2。

  • 布林函式 − 在此函式中,我們將傳遞要施加到範圍的條件。由於此函式的返回型別是布林值,它將返回 true/false,並且根據返回值將顯示範圍元素。

返回值 − 它將返回指向目標迭代器末尾的迭代器,即 i_2,直到複製元素為止。

示例

 線上演示

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
   //creating vector v1
   vector<int> vec_1 = { 10, 21, 30, 40, 57 };
   //declaring empty vector of size
   vector<int> vec_2(6);
   // using copy_if() function to copy in vector 2
   copy_if(vec_1.begin(), vec_1.end(), vec_2.begin(), [](int i){return i%2==0;});
   //print new vector
   cout<<"Elements in vector v2 copied from v1: ";
   for(int i=0; i<4; i++){
      cout<<vec_2[i] << " ";
   }
}

輸出

此程式碼的輸出將是:

Elements in vector v2 copied from v1: 10 30 40 0

copy_backwards(start_i1, end_i1, end_i2)

此方法用於在向後方向上將資料從一個迭代器複製到另一個迭代器,這意味著迭代器將根據其大小移動到末尾,並從該位置貼上元素。它採用三種類型的引數,即:

  • Start_i1 − 它將指向迭代器的初始元素,例如 i_1,從中將元素複製到另一個迭代器,例如 i_2。

  • End_i1 − 它將指向迭代器的結束元素,例如 i_1,直到將元素複製到另一個迭代器,例如 i_2。

  • end_i2 − 它將指向迭代器的結束位置,將在此處複製元素,即 i_2。

返回值 − 它將返回指向目標迭代器起始元素的迭代器,即 i_2,直到複製元素為止。

示例

 線上演示

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
   //creating vector v1
   vector<int> vec_1 = { 10, 21, 30, 40, 57,67 };
   //declaring empty vector of size
   vector<int> vec_2(6);
   // using copy_backward() function to copy in vector 2
   copy_backward(vec_1.begin(), vec_1.end()+4, vec_2.begin()+5);
   //print new vector
   cout<<"Elements in vector v2 copied from v1: ";
   for(int i=0; i<vec_2.size(); i++){
      cout<<vec_2[i] << " ";
   }
}

輸出

此程式碼的輸出將是:

Elements in vector v2 copied from v1: 0 10 21 30 40 0

更新於:2020年8月14日

344 次瀏覽

啟動你的 職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.