[C++] STL 이란?
STL은 Standard Template Library로 표준 템플릿 라이브러리의 약자이다.
표준 C++ 라이브러리로 프로그램에 필요한 자료구조와 알고리즘을 Template로 제공하는 라이브러리이다.
STL은 컨테이너(Container), 반복자(Iterator), 알고리즘(Algorithm) 3가지로 나눌 수 있다.
Container
자료를 저장하는 클래스 템플릿들의 집합
- pair : 간단한 연관 컨테이너로 순서에 따라 first, second 로 불리는 객체로 구성되어 배치, 복사, 비교 가능하다.
pair<int, double> p;
p.first = 1;
p.second = 2.5;
cout << p.first << p.second << endl; // 1, 2.5
- vector : 맨 끝에 삽입과 삭제 그리고 위치참조가 가능한 배열이다.
참조 : https://kiveiru.tistory.com/20
[C++] Vector
Vector는 자동으로 메모리가 할당되는 배열로서 데이터의 끝에서 삽입과 삭제가 이루어진다. 배열처럼 연속되는 저장 위치를 사용하므로 데이터의 추가 및 삭제가 간단하게 처리가 된다. 또한 배
kiveiru.tistory.com
- deque : 맨 앞, 맨 뒤에서 모두 O(1)으로 삽입과 삭제가 가능하다. 메모리 상에서 연속적으로 저장하지는 않아서 반복자를 쓸때 유효성을 보장하지 않는다.
참조 : https://kiveiru.tistory.com/10
[C++] Deque
Deque는 Queue와 Stack이 자료를 한 방향에서만 처리할 수 있는 것과는 다르게 앞과 뒤에서 모두 데이터를 삽입, 제거할 수 있다. Deque의 삽입과 제거는 Queue, Stack 과 같이 모두 O(1)의 시간이 소요된다.
kiveiru.tistory.com
- list/forward_list : 연결리스트로 검색과 접근에 느리지만 위치만 안다면 빠르게 삽입하고 제거가 가능하다.
list<int> a;
a.push_front(2); // 리스트 맨 앞에 2 추가
a.push_back(2); // 리스트 맨 뒤에 2 추가
a.pop_front(); // 리스트 맨 앞의 원소 삭제
a.pop_back(); // 리스트 맨 뒤의 원소 삭제
list<int> :: iterator iter = a.begin(); // 반복자 생성
for(iter=a.begin(); iter!=a.end(); iter++){
cout << *iter << endl; // 리스트 출력
}
- set/multiset : 트리구조로 만들어져 삽입할 때부터 정렬된다.
- map/multimap : set과 굉장히 유사하지만 key값에 더해서 value값이 존재한다.
-unordered_set/ unordered_map/ unordered_multiset/ unordered_multimap : 위의 set과 map와 개념적으로 동일하지만 트리 대신 hash를 이용하여 구현한 컨테이너이다.
stack : LIFO(Last in First out)형식으로 구성된 자료구조
queue : FIFO(First in First out)형식으로 구성된 자료구조
priorty queue : 높은 우선순위를 가진 queue
참조 : https://kiveiru.tistory.com/11
[C++] 백준 1927번 최소힙
1) 문제설명 https://www.acmicpc.net/problem/1927 1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수
kiveiru.tistory.com
반복자
컨테이너 원소를 순회하는 방법을 추상화한 객체
input iterators : 값들의 시퀀스를 읽는 데 사용
output iteratirs : 값들의 시퀀스를 쓰는 데 사용
forward iterators : 읽고 쓸 수 있으며 앞으로 움직일 수 있음
bidirectinal iterators : forward iterators의 특징을 가지며 앞뒤로 움직일 수 있다.
random access iterators : 자유롭게 움직일 수 있다.
알고리즘
sort : 정렬하는 함수
find : 검색하는 함수
transform : 변경하는 함수
for_each : first 부터 last 까지 원소들의 각각에 대해서 함수를 실행하는 함수
generate : 생성하는 함수
binary_search : 이진탐색법으로 검색하는 함수
STL의 특징
STL의 종류가 매우 다양한 만큼 검색, 삽입, 삭제 등을 할때 효율적으로 사용할 수 있는 STL들이 많이있다. 또한 STL은 컨테이너들에게 독립적이기 때문에 라이브러리의 복잡성을 줄여주고 템플릿의 사용을 통해 효과적인 컴파일 타임 다형성을 제공한다.
초창기 STL은 C++ 표준 라이브러리에 큰 영향을 미쳤고 편리하게 라이브러리를 불러와서 사용할 수 있다.