C++에서 벡터 컨테이너 객체 복사
- 이니셜 라이저 목록 표기법을 사용하여 C++에서 벡터 컨테이너 개체 복사
-
std::copy
알고리즘을 사용하여 C++에서 벡터 컨테이너 객체 복사 - 복사 할당 연산자를 사용하여 C++에서 벡터 컨테이너 개체 복사
- 복사 생성자를 사용하여 C++에서 벡터 컨테이너 객체 복사
-
assign
멤버 함수를 사용하여 C++에서 벡터 컨테이너 객체 복사
이 기사에서는 C++에서std::vector
컨테이너 객체를 복사하는 방법에 대한 몇 가지 방법을 설명합니다.
이니셜 라이저 목록 표기법을 사용하여 C++에서 벡터 컨테이너 개체 복사
std::vector
는 STL 컨테이너 라이브러리에서 제공되는 핵심 데이터 구조입니다. 연속적으로 저장되는 동적 크기의 배열 요소를 구현합니다. 메모리 관리는 사용자가 배열에서 요소를 추가하거나 제거 할 때 자동으로 수행됩니다. std::vector
유형의 새 변수를 생성 할 때 이니셜 라이저 목록 표기법을 사용하여 벡터 객체의 복사본을 만들 수 있습니다. 새 객체로 복사해야하는 원래 벡터 객체의begin
및end
반복자를 전달하기 만하면됩니다. 동일한 표기법을 사용하여 해당 반복기를 중괄호의 인수로 지정하여 객체의 하위 벡터를 추출 할 수 있습니다.
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c = {vec1.begin(), vec1.end()};
vector<int> vec1_cc = {vec1.begin(), vec1.end() - 4};
printVector(vec1_c);
printVector(vec1_cc);
return EXIT_SUCCESS;
}
출력:
23; 43; 324; 222; 649; 102; 40; 304;
23; 43; 324; 222;
std::copy
알고리즘을 사용하여 C++에서 벡터 컨테이너 객체 복사
std::vector
객체를 복사하는 또 다른 방법은 STL 알고리즘 라이브러리에서std::copy
함수를 호출하는 것입니다. 범위 기반 개체에 대한 일반 복사 작업을 제공합니다. 이 함수에는 여러 오버로드가 있지만 다음 코드 스 니펫에서 사용되는 오버로드는 세 개의 반복기 인수를 사용합니다. 처음 두 개는 원래 벡터 범위를 지정하고 세 번째 반복자는 대상 벡터 범위의 시작을 나타냅니다.
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c(vec1.size());
copy(vec1.begin(), vec1.end(), vec1_c.begin());
printVector(vec1_c);
return EXIT_SUCCESS;
}
출력:
23; 43; 324; 222; 649; 102; 40; 304;
복사 할당 연산자를 사용하여 C++에서 벡터 컨테이너 개체 복사
또는 복사 할당 연산자를 사용하여std::vector
컨테이너 객체의 내용을 복사 할 수 있습니다. 이 표기법은이 문제에 대한 가장 간결한 해결책입니다. 새로 선언 된 벡터 객체에 원래 벡터의 변수를 할당하기 만하면됩니다.
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c = vec1;
printVector(vec1_c);
return EXIT_SUCCESS;
}
출력:
23; 43; 324; 222; 649; 102; 40; 304;
복사 생성자를 사용하여 C++에서 벡터 컨테이너 객체 복사
반면std::vector
클래스의 복사 생성자는 벡터를 새로 선언 된 벡터 객체로 복사하는 유사한 방법을 제공합니다. 이 경우 새로 생성 된 벡터 변수를 선언 할 때 원래 벡터의 변수를 괄호 안에 전달해야합니다.
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c(vec1);
printVector(vec1_c);
return EXIT_SUCCESS;
}
출력:
23; 43; 324; 222; 649; 102; 40; 304;
assign
멤버 함수를 사용하여 C++에서 벡터 컨테이너 객체 복사
std::vector
컨테이너는 한 벡터 객체의 내용을 다른 벡터의 요소로 대체하는 데 활용할 수있는assign
멤버 함수를 제공합니다. 빈vector
컨테이너를 초기화 한 다음 객체에서assign
함수를 호출하여 다른 벡터의 내용을 복사 할 수 있습니다.
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c;
vec1_c.assign(vec1.begin(), vec1.end());
printVector(vec1_c);
return EXIT_SUCCESS;
}
출력:
23; 43; 324; 222; 649; 102; 40; 304;
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook