C++ STL에서 STL 목록 컨테이너 사용

Jinku Hu 2023년10월12일
  1. std::list<T>를 사용하여 C++에서 목록 컨테이너 개체 선언
  2. insert()함수를 사용하여 C++ 목록의 지정된 위치에 요소 삽입
  3. swap()함수를 사용하여 C++에서 두 목록의 요소 교체
  4. merge()함수를 사용하여 정렬 된 두 목록을 하나로 결합
C++ STL에서 STL 목록 컨테이너 사용

이 기사는 C++에서 STL list컨테이너를 사용하는 방법에 대한 여러 방법을 보여줍니다.

std::list<T>를 사용하여 C++에서 목록 컨테이너 개체 선언

std::list컨테이너는 표준 템플릿 라이브러리의 일부이며 모든 위치에서 요소를 일정한 시간 삽입 / 제거를 제공하는 목록 데이터 구조를 구현합니다. 일반적으로 이중 연결 목록으로 구현되며std::forward_list와는 반대로 양방향 반복을 지원합니다. 단점은std::liststd::vector또는std::deque와 같은 요소에 대한 빠른 랜덤 액세스를 제공하지 않는다는 것입니다. 첫 번째 및 마지막 요소에 액세스하기 위해frontback의 두 가지 상수 시간 기능 만 제공합니다. std::list는 다음 예제 코드에 설명 된대로 주어진 데이터 유형 및 공통 이니셜 라이저 목록 표기법으로 초기화 될 수 있습니다. push_backpush_front메소드를 사용하여 목록의 양쪽에 요소를 추가 할 수 있습니다.

#include <algorithm>
#include <iostream>
#include <list>

using std::cout;
using std::endl;
using std::list;

template <typename T>
void printList(list<T> l) {
  for (const auto &item : l) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  std::list<int> l1 = {11, 12, 13, 14};

  l1.push_front(15);
  printList(l1);
  l1.push_back(16);
  printList(l1);

  return EXIT_SUCCESS;
}

출력:

15; 11; 12; 13; 14;
15; 11; 12; 13; 14; 16;

insert()함수를 사용하여 C++ 목록의 지정된 위치에 요소 삽입

insert()멤버 함수를 사용하여 주어진 위치에 요소를 추가 할 수 있습니다. 이 함수에는 여러 오버로드가 있으며 그 중 첫 번째는 반복기와 개체에 대한 참조라는 두 개의 인수 만 사용합니다. 주어진 요소는 반복기가 가리키는 요소 앞에 삽입됩니다. 다음 코드 스 니펫은 목록에서 특정 값을 찾은 다음 그 앞에 원하는 요소를 삽입하는 방법을 보여줍니다.

#include <algorithm>
#include <iostream>
#include <list>

using std::cout;
using std::endl;
using std::list;

template <typename T>
void printList(list<T> l) {
  for (const auto &item : l) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  std::list<int> l1 = {11, 12, 13, 14};

  printList(l1);
  auto iter = std::find(l1.begin(), l1.end(), 13);
  if (iter != l1.end()) {
    l1.insert(iter, 55);
  }
  printList(l1);

  return EXIT_SUCCESS;
}

출력:

11; 12; 13; 14;
11; 12; 55; 13; 14;

swap()함수를 사용하여 C++에서 두 목록의 요소 교체

std::list컨테이너의 또 다른 유용한 멤버 함수는 목록 객체의 요소를 유일한 인수로 전달되는 다른 목록과 교환하는swap()입니다. 이 작업은 개별 요소를 이동하거나 복사하지 않으며 모든 반복기 / 참조는 함수 호출 후에도 유효합니다.

#include <algorithm>
#include <iostream>
#include <list>

using std::cout;
using std::endl;
using std::list;

template <typename T>
void printList(list<T> l) {
  for (const auto &item : l) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  std::list<int> l1 = {11, 12, 13, 14};
  std::list<int> l2 = {1, 2, 3, 4, 11};

  cout << "l2: ";
  printList(l2);
  l2.swap(l1);
  cout << "l2: ";
  printList(l2);

  return EXIT_SUCCESS;
}

출력:

l2: 1; 2; 3; 4; 11;
l2: 11; 12; 13; 14;

merge()함수를 사용하여 정렬 된 두 목록을 하나로 결합

또는merge멤버 함수를 사용하여 정렬 된 두 목록의 요소를 하나로 결합 할 수 있습니다. 두 목록 모두 오름차순으로 정렬되어야합니다. merge는 목록 개체에 대한 참조를 가져오고 그 요소는 호출자 개체에 병합됩니다. 작업 후 인수로 전달 된 목록 개체는 비어있게됩니다. 이 함수는 다음 코드 샘플과 같이 결과 목록 개체의 요소를 오름차순으로 정렬합니다.

#include <algorithm>
#include <iostream>
#include <list>

using std::cout;
using std::endl;
using std::list;

template <typename T>
void printList(list<T> l) {
  for (const auto &item : l) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  std::list<int> l1 = {8, 10, 2, 4};
  std::list<int> l2 = {7, 3, 9, 5, 1};

  l2.sort();
  l1.sort();
  cout << "l2: ";
  printList(l2);

  l2.merge(l1);

  cout << "l2: ";
  printList(l2);

  return EXIT_SUCCESS;
}

출력:

l2: 1; 3; 5; 7; 9;
l2: 1; 2; 3; 4; 5; 7; 8; 9; 10;
작가: 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++ List