STL
C++에서 기본으로 제공하는 표준 템플릿 라이브러리(Standard Template Library)를 의미한다. 프로그램에 필요한 기본 자료구조와 알고리즘을 제공한다. 예시로 pair, map, list, vector, stack, queue 등이 있다.
Pair
두 가지 종류의 값(객체)을 하나의 값으로 묶을 때 사용한다.
#include <utility> 를 사용해 pair 사용 ex) pair<int,int> p;
선언 : pair<type1, type2> p;
값 초기화 : p = make_pair(value1, value2) ; //value1, value2가 들어간 pair를 만들어 저장한다.
안의 내용값을 사용할 때는 p.first, p.second로 값을 얻을 수 있다.
하나의 값으로 인식되기 때문에 편리하다. ex)좌표값 x,y를 저장
operator도 사용할 수 있고 sort 등도 가능하다.
Stack
Fist In Last Out 방식으로 자료를 저장하는 구조.
#include <stack> 를 사용해 헤더 파일 가져오기
선언 : stack <type> name; ex)stack<int> s;
삽입 : s.push(value);
삭제 : s.pop(); //이 경우에는 pop 된 원소를 반환받을 수 없다. 삭제만 됨.
값 반환 : s.top(); //가장 위에 있는 원소를 반환. 즉 가장 나중에 들어간 원소가 반환. 삭제X
크기 : s.size();
비었는지 여부 : s.empty();
Queue
Fist In FIst Out 방식으로 자료를 저장하는 구조.
#include <queue> 를 사용해 헤더 파일 가져오기
선언 : queue <type> name; ex)queue<string> q;
삽입 : q.push(value);
삭제 : q.pop(); //이 경우에는 pop 된 원소를 반환받을 수 없다. 삭제만 됨.
값 반환 : q.front(); //가장 먼저 들어간 원소가 반환된다. 삭제되지는 않음.
q.back(); //가장 나중에 들어간 원소가 반환된다. 삭제되지 않음.
크기 : q.size();
비었는지 여부 : q.empty();
Vector
동적으로 사용할 수 있는 배열과 비슷. 동적이기 때문에 배열과 달리 선언 후에 크기를 늘릴 수 있어 편리하게 사용한다.
#include <vector> 를 사용해 헤더 파일 가져오기
선언 : vector <type> name; ex)vector<int> v = {1, 2, 3}; (초기화까지) vector<int> v(10); (크기 10인 vector 선언)
vector<int> v[10] : int형 vector 10개를 만듬.
vector<int> v(5,3); (5개의 원소를 3으로 초기화하여 선언)
삽입 : v.push_back(value); //마지막 위치에 value 추가
v.insert(index,value); //index의 위치에 value 추가 해당 index부터 마지막까지 모두 한 칸씩 뒤로 밀려남.
ex) v.insert(2,10); v.insert(2,3,10); //이 경우는 2번째 index부터 3개의 10을 추가한다.
삭제 : v.pop_back(); //끝에 있는 값 제거
v.erase(v.begin()+index); (index 값을 제거) v.erase(v.begin(), v.begin()+value); (사이값 제거)
v.clear(); //모든 값 제거
vector는 중간에 삽입, 삭제가 가능하지만 그럴 경우 그 뒤에 있는 index값이 전부 바뀌기 때문에 주의를 해야한다.
배열은 index값이 유지가 되지만 vector는 그렇지 않다. (*특히 반복문이나 iterator 사용에 주의)
값 반환 : 배열과 동일하게 값을 출력할 수 있다. ex) cout << v[1];
v.front(), v.back() 메서드도 사용 가능.
크기 : v.size(); //원소 개수 v.capacity; //물리적인 전체 크기
비었는지 여부 : v.empty();
vector<type>::iterator : 반복자
라이브러리 자료구조를 효과적으로 접근하는데 사용한다. 포인터와 비슷.
활용 예시 - vector 내용 출력하기
// vector<int>::iterator iter; //auto를 사용하면 편리함.
for(auto iter = v.begin(); iter !=v.end(); iter++)
cout << *iter << endl;'알고리즘 공부' 카테고리의 다른 글
| C++ 이진탐색 정리, 코드 (0) | 2021.04.11 |
|---|---|
| C++ 정렬(Sorting) 알고리즘 정리(2) - 코드, 프로그램 수행 시간 측정 (0) | 2021.04.08 |
| C++ 정렬(Sorting) 알고리즘 정리(1) - 이론 (0) | 2021.04.07 |
| C++ 그래프 탐색 알고리즘 기본 DFS/BFS 구현 (0) | 2021.04.07 |
| 대표적인 그래프 탐색 알고리즘 DFS/BFS 이론 (0) | 2021.04.07 |
댓글