[Basic C++] #31-2_STL 컨테이너, vector, list, deque, set, map

2022. 5. 30. 15:07· 언어/Basic C++
목차
  1.  
  2. [Basic C++] #31-2_STL 컨테이너, vector, list, deque

 

[Basic C++] #31-2_STL 컨테이너, vector, list, deque

 

C++ 개발에서 표준 라이브러리(STL)에 대해 알아보겠습니다.

"전문가를 위한 C"의 15 항목, "C++ 표준 라이브러리 살펴보기"에 해당하는 내용입니다.

 


 

Overview

 

  1. vector
  2. list
  3. deque
  4. set
  5. map

 

#0. vector

1. 개념

  • vector는 STL이 제공하는 순차 컨테이너에 대한 템플릿 클래스입니다.
  • vector는 지정된 형식의 요소를 선형 배열에 저장하고, 모든 요소에 대한 빠른 임의의 접근이 가능합니다.
  • vector의 성능은 컨테이너 끝에서 수행하는 삽입 및 제거 작업의 성능은 O(1) 상수 시간으로 비교적 빠릅니다. 하지만, 컨테이너 중간에서 수행하는 삽입 및 삭제 작업의 성능은 O(n) 선형 시간입니다.
  • 배열과 달리 vector의 크기는 유동적입니다.  
  • vector의 메모리 사이즈가 커지면, 메모리 재할당이 발생합니다.

 

2. 비교(deque, list)

  • 컨테이너의 시작 지점과 끝 지점에서 수행하는 삽입 및 삭제 작업은 vector 보다 deque가 더 빠릅니다.
  • 컨테이너의 모든 위치에서 삽입 및 삭제 작업은 list가 더 빠릅니다. 

 

#1. list

1. 개념

  • list는 STL이 제공하는 순차 컨테이너에 대한 템플릿 클래스입니다.
  • 특정 항목을 기준으로 앞의 항목과 뒤의 항목의 위치만 관리하며, 이중 연결 리스트의 구조를 갖고 있습니다.
  • 순차 컨테이너 내 모든 위치에서 효율적인 삽입 및 삭제를 허용합니다.
  • vector나 배열과 달리, 저장하고 있는 항목들이 메모리에 연속적으로 위치하지 않을 수도 있습니다.
  • 만약, 이중 연결 리스트가 아니라 단방향 연결 리스트를 필요로 한다면, "forward_list"를 사용하면 됩니다.

 

#2. deque

1. 개념

  • deque는 STL이 제공하는 지정된 형식의 요소들을 저장하는 양방향  큐(Double Ended Queue)입니다. 
  • dequeue는 모든 요소에 대한 빠른 임의의 접근이 가능하며, 시작 위치와 끝나는 위치에서 수행하는 삽입 + 삭제 연산에 분할 상수 시간의 빠른 성능을 제공합니다.
  • 단, 중간 항목들에서 수행하는 연산은 느리겠죠.

 

#3. set

1. 개념

  • set은 STL이 제공하는 중복이 불가능한 균형 이진트리 자료구조를 갖는 가변 크기 연관 컨테이너입니다.
  • set은 자동으로 정렬되는 고유한 key값을 원소로 이루어진 집합입니다.
  • set에 저장되는 항목에 순서가 자동으로 부여됩니다. 왜냐하면, 저장되는 항목을 나열할 때 항목의 타입에 적용되는 "operator >" 연산자, 즉 사용자 정의 비교 연산자가 적용된 순서로 항목이 추출되기 때문입니다. 
  • 균형 이진트리에 저장된 항목들은 중위 순회(왼쪽 하위 트리를 방문 후 뿌리를 방문)를 통해 출력됩니다.
  • "set"은 항목들이 순서를 갖고 삽입, 삭제, 그리고 탐색 연산이 비슷한 비율로 수행되기를 원할 때 사용하기 좋습니다.
  • 만약, 항목 간의 중복을 허용하고자 한다면, "multiset"을 이용할 수 있습니다.

 

#4. map

1. 개념

  • map은 STL이 제공하는 중복이 불가능한 키와 데이터 값을 한 쌍으로 레드-블랙 이진트리 자료구조의 연관 컨테이너입니다.
  • map의 각 요소는 키 값을 기준으로 지정된 비교 함수에 따라서 자동으로 정렬(오름차순 디폴트)되어 있습니다.
  • map의 탐색, 삽입, 그리고 삭제 작업은 O(log n)의 시간 복잡도를 갖습니다.

 

 

 

'언어 > Basic C++' 카테고리의 다른 글

[Basic C++] #32-2_STL 탐색 알고리즘  (0) 2022.06.04
[Basic C++] #32-1_STL 알고리즘  (0) 2022.06.04
[Basic C++] #31-1_STL, C++ 표준 라이브러리  (0) 2022.05.30
[Basic C++] #30_캐스팅, const_cast, static_cast, dynamic_cast  (0) 2022.05.28
[Basic C++] #29_typedef  (0) 2022.05.22
  1.  
  2. [Basic C++] #31-2_STL 컨테이너, vector, list, deque
'언어/Basic C++' 카테고리의 다른 글
  • [Basic C++] #32-2_STL 탐색 알고리즘
  • [Basic C++] #32-1_STL 알고리즘
  • [Basic C++] #31-1_STL, C++ 표준 라이브러리
  • [Basic C++] #30_캐스팅, const_cast, static_cast, dynamic_cast
Hardii2
Hardii2
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기
    • 알고리즘
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

  • programmers
  • Unreal Blueprint
  • 최단 경로
  • 트리
  • dfs
  • BOJ
  • set
  • 정렬
  • 우선순위 큐
  • stl
  • DP
  • 그래프
  • C++
  • Effective C++
  • BFS
  • 기술 질문
  • 알고리즘
  • unreal
  • 디자인 패턴
  • 개발

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[Basic C++] #31-2_STL 컨테이너, vector, list, deque, set, map
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.