Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 벡터를 복사하는 5가지 방법

C++에서는 한 벡터(vector)의 요소를 다른 벡터로 복사하는 다양한 방법이 있습니다. 이 글에서는 std::copy, assign(), 대입 연산자(=), push_back(), 복사 생성자까지 총 5가지 방법을 예제 코드와 함께 살펴보겠습니다.

1) std::copy 사용

std::copy는 한 벡터의 요소를 다른 벡터로 복사하기 위해 표준 라이브러리에 내장된 함수입니다.

문법

std::copy(first_iterator_o, last_iterator_o, back_inserter());
first_iterator_o = 첫 번째 벡터의 시작 반복자
last_iterator_o  = 첫 번째 벡터의 끝 반복자
back_inserter()  = 뒤에서부터 값을 삽입

알고리즘

Begin
    vector 타입의 v1 선언 후 배열 형태로 값 초기화
    vector 타입의 v2 선언
    copy(v1.begin(), v1.end(), back_inserter(v2))를 호출하여 v1의 모든 요소를 v2로 복사
    "v1 벡터의 요소 :" 출력
    for 루프로 v1의 모든 요소 출력
    "v2 벡터의 요소 :" 출력
    for 루프로 v2의 모든 요소 출력
End.

예제 코드

#include<iostream>
#include<vector>
#include<algorithm> // copy() 사용
#include<iterator> // back_inserter 사용
using namespace std;

int main() {
    vector<int> v1{ 7, 6, 4, 5 };
    vector<int> v2;

    // v1의 모든 요소를 v2로 복사
    copy(v1.begin(), v1.end(), back_inserter(v2));

    cout << "v1 벡터의 요소 : ";
    for (int i = 0; i < v1.size(); i++)
        cout << v1[i] << " ";
    cout << endl;

    cout << "v2 벡터의 요소 : ";
    for (int i = 0; i < v2.size(); i++)
        cout << v2[i] << " ";
    cout << endl;

    return 0;
}

실행 결과

v1 벡터의 요소 : 7 6 4 5
v2 벡터의 요소 : 7 6 4 5

2) assign() 함수 사용

assign() 함수 역시 첫 번째 벡터의 값을 두 번째 벡터로 복사할 때 사용됩니다. 기존에 있던 내용은 덮어쓰기 됩니다.

문법

v2.assign(first_iterator_o, last_iterator_o);
first_iterator_o = 첫 번째 벡터의 시작 반복자
last_iterator_o  = 첫 번째 벡터의 끝 반복자

알고리즘

Begin
    요소를 가진 벡터 v1 초기화
    다른 벡터 v2 선언
    assign()을 호출하여 v1의 요소를 v2로 복사
    v1의 요소 출력
    v2의 요소 출력
End.

예제 코드

#include<iostream>
#include<vector>      // vector 사용
#include<algorithm>   // copy(), assign() 사용
#include<iterator>    // back_inserter 사용
using namespace std;

int main() {
    vector<int> v1{7, 6, 4, 5};
    vector<int> v2;

    // assign()으로 v1의 요소를 v2에 복사
    v2.assign(v1.begin(), v1.end());

    cout << "v1 벡터의 요소 : ";
    for (int i = 0; i < v1.size(); i++)
        cout << v1[i] << " ";
    cout << endl;

    cout << "v2 벡터의 요소 : ";
    for (int i = 0; i < v2.size(); i++)
        cout << v2[i] << " ";
    cout << endl;

    return 0;
}

실행 결과

v1 벡터의 요소 : 7 6 4 5
v2 벡터의 요소 : 7 6 4 5

3) 대입 연산자(=) 사용

대입 연산자 =를 사용하면 가장 간단하게 한 벡터의 값을 다른 벡터로 복사할 수 있습니다.

알고리즘

Begin
    요소를 가진 벡터 v1 초기화
    다른 벡터 v2 선언
    대입 연산자 "="를 사용하여 v1의 요소를 v2로 복사
    v1의 요소 출력
    v2의 요소 출력
End.

예제 코드

#include<iostream>
#include<vector>      // vector 사용
#include<algorithm>   // copy(), assign() 사용
#include<iterator>    // back_inserter 사용
using namespace std;

int main() {
    vector<int> v1{7, 6, 4, 5};
    vector<int> v2;

    // 대입 연산자로 복사
    v2 = v1;

    cout << "v1 벡터의 요소 : ";
    for (int i = 0; i < v1.size(); i++)
        cout << v1[i] << " ";
    cout << endl;

    cout << "v2 벡터의 요소 : ";
    for (int i = 0; i < v2.size(); i++)
        cout << v2[i] << " ";
    cout << endl;

    return 0;
}

실행 결과

v1 벡터의 요소 : 7 6 4 5
v2 벡터의 요소 : 7 6 4 5

4) push_back() 메서드 사용

반복문과 함께 push_back()을 사용하면 첫 번째 벡터의 요소를 하나씩 두 번째 벡터에 추가하며 복사할 수 있습니다.

알고리즘

Begin
    요소를 가진 벡터 v1 초기화
    다른 벡터 v2 선언
    for 루프와 push_back()을 이용해 v1의 요소를 순차적으로 v2에 복사
    v1의 요소 출력
    v2의 요소 출력
End.

예제 코드

#include<iostream>
#include<vector>      // vector 사용
#include<algorithm>   // copy(), assign() 사용
#include<iterator>    // back_inserter 사용
using namespace std;

int main() {
    vector<int> v1{7, 6, 4, 5};
    vector<int> v2;

    // 반복문으로 요소 하나씩 복사
    for (int i = 0; i < v1.size(); i++)
        v2.push_back(v1[i]);

    cout << "v1 벡터의 요소 : ";
    for (int i = 0; i < v1.size(); i++)
        cout << v1[i] << " ";
    cout << endl;

    cout << "v2 벡터의 요소 : ";
    for (int i = 0; i < v2.size(); i++)
        cout << v2[i] << " ";
    cout << endl;

    return 0;
}

실행 결과

v1 벡터의 요소 : 7 6 4 5
v2 벡터의 요소 : 7 6 4 5

5) 복사 생성자 사용

벡터를 선언하는 시점에 다른 벡터를 인수로 전달하면 복사 생성자가 호출되어 요소들이 깊은 복사(deep copy)됩니다. 가장 직관적이면서 안전한 방법 중 하나입니다.

알고리즘

Begin
    요소를 가진 벡터 v1 초기화
    생성자를 통해 v1의 요소를 깊은 복사하여 v2 선언
    v1의 요소 출력
    v2의 요소 출력
End.

예제 코드

#include<iostream>
#include<vector>      // vector 사용
#include<algorithm>   // copy(), assign() 사용
#include<iterator>    // back_inserter 사용
using namespace std;

int main() {
    vector<int> v1{7, 6, 4, 5};

    // 복사 생성자로 v1을 복사하여 v2 생성
    vector<int> v2(v1);

    cout << "v1 벡터의 요소 : ";
    for (int i = 0; i < v1.size(); i++)
        cout << v1[i] << " ";
    cout << endl;

    cout << "v2 벡터의 요소 : ";
    for (int i = 0; i < v2.size(); i++)
        cout << v2[i] << " ";
    cout << endl;

    return 0;
}

실행 결과

v1 벡터의 요소 : 7 6 4 5
v2 벡터의 요소 : 7 6 4 5

마무리

지금까지 C++에서 벡터를 복사하는 5가지 방법을 알아보았습니다. 간단한 전체 복사에는 대입 연산자(=)복사 생성자가 가장 편리하고, 부분 복사나 특정 조건의 복사가 필요하다면 std::copyassign()을 활용하는 것이 좋습니다. 상황에 맞는 방법을 선택해 효율적인 코드를 작성해 보세요.