home..
Cpp08
Younji Kim / August 2022
STL을 학습하는 CPP08에 대한 정리
STL이란?
C++의 표준 템플릿 라이브러리(Standard Template Library)를 STL이라 한다. STL의 구성 요소는 다음과 같다.
- Container : 자료구조(stack, queue, vector, …) 같은 타입의 여러 객체를 저장하는 일종의 집합 개념이다. 컨테이너의 각 요소에 반복자(iterator)를 통해 접근할 수 있다. 컨테이너의 요소 추가/제거를 포함한 다양한 직업을 도와주는 함수를 포함함. STL 컨테이너는 크게 다음과 같이 나뉜다.
- 시퀀스 컨테이너 : 데이터를 선형으로 저장하며, 특별한 제약이나 규칙이 없는 가장 일반적인 컨테이너이다. 삽입된 요소의 순서가 그대로 유지된다. 명확한 순서가 유지되는 요소들이기 때문에 특정 위치를 참조하는 연산이 가능해야 한다. (vector, deque, list, forward_list)
- 연관 컨테이너 : key와 value처럼 관련 있는 데이터를 하나의 쌍으로 저장하는 컨테이너이다. (set, multiset, map, multimap)
- 컨테이너 어댑터 : 간결함과 명료성을 위해 인터페이스를 제한한 시퀀스 컨테이너나 연관 컨테이너의 변형이다. 반복자(iterator)를 지원하지 않으므로 STL 알고리즘에서는 사용할 수 없다. (stack, queue, priority_queue)
-
Iterator : 컨테이너에 저장된 요소를 반복적으로 순회하여, 각각 요소에 대한 접근을 제공하는 객체이다. 모든 자료구조의 원소에 대한 동일한 접근 방법을 제공한다. (포인터와 유사함!) iterator 타입의 iter 객체를 선언하여 컨테이너의 특정 위치에 접근하며, 벡터의 경우에는 iterator와 pointer가 동일한 개념이다.
iterator가 필요한 이유는 다음과 같다. 지금까지는 필요할 때마다 변수를 사용해 요소에 접근했지만, 반복자는 그런 연산의 과정을 어떤 객체에서나 동일하게 사용할 수 있도록 하는 제네릭 포인터 객체인 것이다. - Algorithm : sort, swap, find 등 알고리즘이 함수로 제공된다.
벡터와 리스트
#include <vector>
vector<[data type]> 이름
벡터와 리스트의 차이
- Vector는 값을 삭제하더라도 메모리 해제를 하지 않는다. clear()를 해도 메모리는 그대로 남는다. 반대로 list는 변수가 해제될 때마다 메모리에서 해제된다. 그렇기 때문에 할당과 해제 모두 vector가 훨신 빠르다. 중간의 값을 삭제하는 건 list가 빠르다.
- 순서와 상관없거나 순차적으로만 추가, 삭제되는 데이터는 vector로, 순서가 중요하여 리스트의 중간에 접근해서 값을 추가 삭제 할 경우에는 list를 사용하는 것이 좋다.
Iterator 선언
출처
https://velog.io/@chaewonkang/CPP-Module-08