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::copy나 assign()을 활용하는 것이 좋습니다. 상황에 맞는 방법을 선택해 효율적인 코드를 작성해 보세요.