Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++ STL에서 복사하는 다양한 방법 - std::copy(), copy_n(), copy_if(), copy_backwards()


메서드 이름에서 알 수 있듯이 copy() 메서드는 C++ STL에서 사용할 수 있는 다양한 메서드를 통해 데이터를 복사하는 데 사용됩니다. 모든 방법은 기능과 매개변수가 다릅니다. 이러한 메소드는 헤더 파일에서 사용할 수 있습니다. 각 방법과 기능에 대해 알아보겠습니다.

복사(start_i1, end_i1, start_i2)

이 메서드는 반복기의 시작 및 끝 요소가 모두 포함된 지정된 범위 내에서 한 반복기에서 다른 반복기로 데이터를 복사하는 데 사용됩니다. 세 가지 유형의 인수, 즉 -

가 필요합니다.
  • Start_i1 − iterator의 초기 요소를 가리킬 것입니다. 예를 들어, 요소가 다른 iterator로 복사될 위치에서 i_1, i_2라고 가정해 봅시다.

  • End_i1 - iterator의 끝 요소를 가리킬 것입니다. i_1이라고 하면 요소가 다른 iterator에 복사될 때까지 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, 총계, start_i2)

이 방법은 또한 한 반복기에서 다른 반복기로 데이터를 복사하는 데 사용되지만 주어진 위치에서 시작하여 총 몇 개의 요소를 복사해야 하는지 컴파일러에 알려줍니다. 세 가지 유형의 인수가 필요합니다. -

  • Start_i1 − iterator의 초기 요소를 가리킬 것입니다. 예를 들어, 요소가 다른 iterator로 복사될 위치에서 i_1, i_2라고 가정해 봅시다.

  • 총계 − 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 − iterator의 초기 요소를 가리킬 것입니다. 예를 들어, 요소가 다른 iterator로 복사될 위치에서 i_1, i_2라고 가정해 봅시다.

  • End_i1 - iterator의 끝 요소를 가리킬 것입니다. i_1이라고 하면 요소가 다른 iterator에 복사될 때까지 i_2라고 가정해 보겠습니다.

  • Start_i2 &minbus; 요소가 복사될 반복기의 초기 위치, 즉 i_2를 가리킵니다.

  • 부울 함수 − 이 함수에서는 범위에 부과하려는 조건을 전달합니다. 이 함수의 반환 유형은 Boolean이므로 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 − iterator의 초기 요소를 가리킬 것입니다. 예를 들어, 요소가 다른 iterator로 복사될 위치에서 i_1, i_2라고 가정해 봅시다.

  • End_i1 - iterator의 끝 요소를 가리킬 것입니다. i_1이라고 하면 요소가 다른 iterator에 복사될 때까지 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