C++에서 벡터 컨테이너 객체 복사

Jinku Hu 2023년10월12일
  1. 이니셜 라이저 목록 표기법을 사용하여 C++에서 벡터 컨테이너 개체 복사
  2. std::copy알고리즘을 사용하여 C++에서 벡터 컨테이너 객체 복사
  3. 복사 할당 연산자를 사용하여 C++에서 벡터 컨테이너 개체 복사
  4. 복사 생성자를 사용하여 C++에서 벡터 컨테이너 객체 복사
  5. assign멤버 함수를 사용하여 C++에서 벡터 컨테이너 객체 복사
C++에서 벡터 컨테이너 객체 복사

이 기사에서는 C++에서std::vector컨테이너 객체를 복사하는 방법에 대한 몇 가지 방법을 설명합니다.

이니셜 라이저 목록 표기법을 사용하여 C++에서 벡터 컨테이너 개체 복사

std::vector는 STL 컨테이너 라이브러리에서 제공되는 핵심 데이터 구조입니다. 연속적으로 저장되는 동적 크기의 배열 요소를 구현합니다. 메모리 관리는 사용자가 배열에서 요소를 추가하거나 제거 할 때 자동으로 수행됩니다. std::vector유형의 새 변수를 생성 할 때 이니셜 라이저 목록 표기법을 사용하여 벡터 객체의 복사본을 만들 수 있습니다. 새 객체로 복사해야하는 원래 벡터 객체의beginend반복자를 전달하기 만하면됩니다. 동일한 표기법을 사용하여 해당 반복기를 중괄호의 인수로 지정하여 객체의 하위 벡터를 추출 할 수 있습니다.

#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;
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

관련 문장 - C++ Vector