[STL] 시퀸스 컨테이너

......·2023년 12월 3일

STL

목록 보기
2/8
  • Vector 컨테이너
  • Deque 컨테이너
  • List 컨테이너

시퀸스 컨테이너

  • Vector, Deque, List 컨테이너가 있으며, 저장 원소가 삽입 순서에 따라 상대적인 위치(순서)를 갖는 컨테이너를 말함

Vector 컨테이너

템플릿 형식

template<typename T, typename Allocator = allocator<T>> class vector

인터페이스

  • 생성자
vector v		: 빈 컨테이너
vector v(n)		: 기본값으로 초기화된 n개의 원소를 갖는 컨테이너
vector v(n, x)	: x값으로 초기화된 n개의 원소를 갖는 컨테이너
vector v(v2)	: v2 컨테이너의 복사본(복사 생성자 호출)
vector v(b, e)	: 반복자 구간으로 [b, e)로 초기화된 원소
  • 멤버 함수
v.assign(n, x)		: v를 x값으로 n개의 원소를 할당
v.assign(b, e)		: v를 반복자 구간 [b, e)로 할당
v.at(i)				: i번째 원소를 참조(const, 비 const 버전이 있으며 범위점검을 포함) / []연산과 기능이 동일
v.back()			: 마지막 원소를 참조(const, 비 const 버전)
p = v.begin()		: p는 v의 첫 원소를 가리키는 반복자(const, 비 const 버전)
x = v.capacity()	: x는 v에 할당된 크기
v.clear()			: v의 모든 원소를 제거
v.empty()			: v가 비었는지 확인
p = v.end()			: p는 v의 마지막 원소를 표시하는 반복자(const, 비 const 버전)
q = v.erase(p)		: q는 다음 원소를 가리키며, p가 가리키는 원소를 제거
q = v.erase(b, e)	: 반복자 구간[b, e)의 모든 원소를 제거, q는 다음 원소를 가리킴
v.front()			: v의 첫번째 원소를 참조(const, 비 const 버전)
q = v.insert(p, x)	: p의 위치에 x값을 삽입, q는 삽입한 원소를 가리킴
v.insert(p, n, x)	: p가 가리키는 위치에 n개의 x값을 삽입
v.insert(p, b, e)	: p가 가리키는 위치에 반복자 구간 [b, e)의 원소를 삽입
x = v.max_size()	: x는 v가 담을 수 있는 최대 원소의 개수 ( = 메모리의 크기)
v.pop_back()		: v의 마지막 원소를 제거
v.push_back()		: v의 끝에 원소를 추가
p = v.rbegin()		: p는 v의 역 순차열의 첫 원소를 가리키는 반복자(const, 비 const 버전)
p = v.rend()		: p는 v의 역 순차열의 끝 원소를 가리키는 반복자(const, 비 const 버전)
v.reserve(n)		: n개의 원소를 저장할 공간을 예약
v.resize(n)			: v의 크기를 n으로 변경하고 확장되는 공간의 값을 기본값으로 초기화
v.resize(n, x)		: v의 크기를 n으로 변경하고 확장되는 공간의 값을 x로 초기화
v.size()			: v의 원소의 개수
v.swap(v2)			: v와 v2를 바꿈
  • 연산자
<vector의 템플릿의 특수화(bool 타입)>
v1 == v2	: 1과 2의 모든 원소가 같은가?
v1 != v2	: 1과 2의 모든 원소 중 하나라도 다른 원소가 있는가?
v1 < v2		: 문자열 비교처럼 2가 1보다 큰가?
v1 <= v2	: 문자열 비교처럼 2가 1보다 크거나 같은가?
v1 > v2		: 문자열 비교처럼 1이 2보다 큰가?
v1 >= v2	: 문자열 비교처럼 1이 2보다 크거나 같은가?

v[i]		: i번째 원소를 참조(const, 비 const 버전이 있으며 범위 점검이 없음)

템플릿 멤버 형식

allocator_type			: 메모리 관리자 형식
const_iterator			: const 반복자 형식
const_pointer			: const value_type* 형식
const_reference			: const value_type& 형식
const_reverse_iterator	: const 역 반복자 형식
difference_type			: 두 반복자 차이의 형식
iterator				: 반복자 형식
pointer					: value_type* 형식
reference				: value_type& 형식
reverse_iterator		: 역 반복자 형식
size_type				: 첨자(index)나 원소의 개수 등의 형식
value_type				: 원소의 형식

Vector의 특징

  • 배열 기반 컨테이너
  • 임의 접근 반복자
  • capacity()는 vector만이 가지는 유일한 멤버 함수
  • 컴파일러마다 다르며, 메모리의 크기(capacity)가 일정 규칙에 의해 확장됨

Deque 컨테이너

템플릿 형식

template<typename T, typename Allocator = allocator<T>> class deque

인터페이스

  • 생성자
deque dq		: dq는 빈 컨테이너
deque dq(n)		: dq는 기본값으로 초기화 된 n개의 원소를 가짐
deque dq(n, x)	: dq는 x값으로 초기화 된 n개의 원소를 가짐
deque dq(dq2)	: dq는 dq2의 복사본(복사 생성자 호출)
deque dq(b, e)	: dq는 반복자[b, e)로 초기화 된 원소를 가짐
  • 멤버 함수
dq.assign(n, x)		: dq에 x값으로 초기화 된 n개의 원소를 할당
dq.assign(b, e)		: dq에 반복자 [b, e)로 할당
dq.at(i)			: i번째의 원소를 참조(const ,비 const 버전 / 범위 점검 포함)
dq.back()			: 마지막 원소를 참조(const, 비 const 버전)
p = dq.begin()		: p는 첫 원소를 가리키는 반복자(const, 비 const 버전)
dq.clear()			: 모든 원소를 제거
dq.empty()			: dq가 비었는지 확인
p = dq.end()		: p는 마지막 원소를 가리키는 반복자(const, 비 const 버전)
q = dq.erase(p)		: p가 가리키는 원소를 제거, q는 다음 원소를 가리킴
q = dq.erase(b,e)	: 반복자 [b, e)를 제거, q는 다음원소를 가리킴
dq.front()			: 첫 원소를 참조(const, 비 const 버전)
q = dq.insert(p, x)	: p의 위치에 x값을 삽입, q는 삽입한 원소를 가리킴
dq.insert(p, n, x)	: p의 위치에 x값을 n개만큼 삽입
dq.insert(p, b, e)	: p의 위치에 반복자 [b, e)를 삽입
x = dq.max_size()	: x는 dq가 담을 수 잇는 최대 원소의 개수(메모리의 크기)
dq.pop_back()		: dq의 마지막 원소를 제거
dq.pop_front()		: dq의 첫 원소를 제거
dq.push_back(x)		: dq의 끝에 x를 추가
dq.push_front(x)	: dq의 앞쪽에 x를 추가
p = dq.rbegin()		: p는 dq의 역 순차열의 첫 원소를 가리키는 반복자(const, 비 const 버전)
p = dq.rend()		: p는 dq의 역 순차열의 끝 원소를 가리키는 반복자(const, 비 const 버전)
dq.resize(n)		: dq의 사이즈를 n으로 변경하고 확장 시, 기본값으로 초기화
dq.resize(n, x)		: dq의 사이즈를 n으로 변경하고 확장 시, x값으로 초기화
dq.size()			: dq의 원소의 개수
dq.swap(dq2)		: dq와 dq2를 swap
  • 연산자
<deque의 템플릿 특수화(bool타입)>
dq1 == dq2	: 1과 2의 원소가 같은가?
dq1 != dq2	: 1과 2의 원소가 하나라도 다른게 있는가?
dq1 < dq2	: 1이 2보다 작은가?
dq1 <= dq2	: 1이 2보다 작거나 같은가?
dq1 > dq2	: 1이 2보다 큰가?
dq1 >= dq2	: 1이 2보다 크거나 같은가?

dq[i] 		: i번째 원소를 참조(const, 비 const 버전)

멤버 형식

allocator_type			: 메모리 관리자 형식
const_iterator			: const 반복자 형식
const_pointer			: const	value_type* 형삭
const_reference			: const	value_type& 형삭
const_reverse_iterator	: const 역 반복자 형식
difference_type			: 두 반복자 차이의 형식
iterator				: 반복자 형식
pointer					: value_type* 형삭
reference				: value_type& 형삭
reverse_iterator		: 역 반복자 형식
size_type				: 첨자(index)나 원소의 개수 형식
value_type				: 원소의 형식

Deque의 특징

  • 배열 기반 컨테이너
  • 임의 접근 반복자
  • 여러 개의 메모리 블록을 할당 한 후, 하나의 블록처럼 보이게 하는 정책을 사용
  • 원소의 추가 시, 일정한 크기의 새로운 메모리 블록을 할당

List 컨테이터

템플릿 컨테이너

template<typename T, typename Allocator = allocator<T>>

인터페이스

  • 생성자
list lt			: 빈 컨테이너
list lt(n)		: n개의 원소를 갖는 기본값으로 초기화 된 컨테이너
list lt(n, x)	: n개의 원소를 x값으로 초기화 한 컨테이너
list lt(lt2)	: lt2를 복사(복사 생성자)
list lt(b, e)	: 반복자[b, e)로 초기화 된 원소를 가짐
  • 멤버 함수
lt.assign(n, x)			: x값으로 n개의 원소를 할당
lt.assign(b, e)			: 반복자 [b,e)로 할당
lt.back()				: 마지막 원소를 참조(const, 비 const 버전)
p = lt.begin()			: p는 첫 원소를 가리키는 반복자(const, 비 const 버전)
lt.clear()				: 모든 원소를 제거
lt.empty()				: lt가 비었는지 확인
p = lt.end()			: p는 끝 원소를 표시하는 반복자(const, 비 const 버전)
q = lt.erase(p)			: p가 가리키는 원소를 제거하고 q는 다음 원소를 가리킴
q = lt.erase(b, e)		: 반복자[b,e)의 모든 원소를 제거, q는 다음 원소
lt.front()				: 첫 번째 원소를 참조(const, 비 const 버전)
q = lt.insert(p, x)		: p가 가리키는 위치에 x원소를 삽입, q는 삽입한 원소를 가리키는 반복자
lt.insert(p, n, x)		: p가 가리키는 위치에 n개의 x원소를 삽입
lt.insert(p, b, e)		: p가 가리키는 위치에 반복자 [b, e)를 삽입
x = lt_max_size()		: x는 최대 원소의 개수(메모리의 크기)
lt.merge(lt2)			: lt2를 lt로 합병 정렬한다(오름차순 : less)
lt.merge(lt2, pred)		: lt2를 lt로 합병 정렬, pred(조건자)를 기준으로 합병(pred는 이항 조건자)
lt.pop_back()			: 마지막 원소를 제거
lt.pop_front()			: 첫 원소를 제거
lt.push_back(x)			: 끝에 x를 추가
lt.push_front(x)		: 앞에 x를 추가
p = lt.rbegin()			: p는 역 순차열의 첫 원소를 가리키는 반복자(const, 비 const 버전)
lt.remove(x)			: x 원소를 모두 제거
lt.remove_if(pred)		: pred(단항 조건자)가 '참'인 모든 원소를 제거
p = lt.rend()			: p는 역 순차열의 끝 원소를 가리키는 반복자(const, 비 const 버전)
lt.resize(n)			: 크기를 n으로 변경하고 확장 시 기본값으로 초기화
lt.resize(n, x)			: 크기를 n으로 변경하고 확장 시 x값으로 초기화
lt.reverse()			: 순차열을 뒤집음
lt.size()				: lt원소의 개수
lt.sort()				: lt의 모든 원소를 오름차순(less)로 정렬
lt.sort(pred)			: lt의 모든 원소를 pred(조건자)를 기준으로 정렬(pred는 이항 조건자)
lt.splice(p, lt2)		: p가 가리키는 위치에 lt2의 모든 원소를 잘라 붙임
lt.splice(p, lt2, q)	: p가 가리키는 위치에 lt2의 q가 가리키는 원소를 잘라 붙임
lt.splice(p, lt2, b, e)	: p가 가리키는 위치에 lt2의 순차열[b, e)를 잘라 붙임
lt.swap(lt2)			: lt와 lt2를 swap
lt.unique()				: 인접한 원소의 값이 같다면 유일한 원소의 순차열로 만듦
lt.unique(pred)			: 인접한 원소가 pred(이항 조건자)의 기준에 맞다면 유일한 원소의 순차열로 만듦
  • 연산자
<list의 템플릿 특수화(bool타입)>
lt == lt2	: 1과 2의 모든 원소가 같은가?
lt != lt2	: 1과 2에서 다른 원소가 하나라도 있는가?
lt < lt2	: 문자열 비교처럼 1이 2보다 작은가?
lt <= lt2	: 문자열 비교처럼 1이 2보다 작거나 같은가?
lt > lt2	: 문자열 비교처럼 1이 2보다 큰가?
lt >= lt2	: 문자열 비교처럼 1이 2보다 크거나 같은가?

멤버 형식

allocator_type			: 메모리 관리자 형식
const_iterator			: const 반복자 형식
const_pointer			: const	value_type* 형삭
const_reference			: const	value_type& 형삭
const_reverse_iterator	: const 역 반복자 형식
difference_type			: 두 반복자 차이의 형식
iterator				: 반복자 형식
pointer					: value_type* 형삭
reference				: value_type& 형삭
reverse_iterator		: 역 반복자 형식
size_type				: 첨자(index)나 원소의 개수 형식
value_type				: 원소의 형식

List의 특징

  • 노드 기반 컨테이너
  • 각 노드는 앞쪽, 뒤쪽 노드와 연결된 형태로 이중 연결 리스트(doubly linked_list)
  • at()과 [] 연산자가 없음
  • 양방향 반복자 제공

0개의 댓글