알고리즘/[개념] C++
[C++] STL 정리
로그뉴
2020. 1. 5. 23:41
STL(Standard Template Library)
: C++의 템플릿을 사용하여 표준으로 정리된 라이브러리
컨테이너(Container)
: 컨테이너란 기본 자료형과 유저가 정의한 자료형을 담는 일종의 자료구조
- 간단한 컨테이너 : pair
- 시퀀스 컨테이너 : vector, list, deque ...
- 연관 컨테이너 : set, map, multiset, multimap ...
- 어댑터 컨테이너 : queue, priority queue, stack ...
1. vector
: 자동으로 메모리가 할당되는 동적배열로서, end에 요소를 삽입하는 연산은 상수 시간을 필요로 한다.
중간에 값을 삽입, 삭제 할 수 있지만 빈번해지면 비효율적이다.
생성자와 연산자
- vector<int> v; // 빈 벡터 생성
- vector<int> v(3); // 0으로 초기화 된 3개의 원소를 가지는 벡터 생성
- vector<int> v(3,1); // 1로 초기화 된 3개의 원소를 가지는 벡터 생성
- vector<int> v2(v); // v 벡터를 복사하여 v2 생성
멤버함수
- v.assign(3,1); // 1의 값으로 3개의 원소 할당
- v[idx]; // idx 번째 원소 참조
- v.front();
- v.back();
- v.clear(); // 모든 원소 제거하지만 메모리는 그대로 남아있다.
- v.push_back(1);
- v.pop_back();
- v.begin();
- v.end();
- v.reserve(n);
- v.resize(n);
- v.size();
- v.capacity();
- v.insert(1,2); // 1번째 위치에 2값 삽입
- v.insert(1,2,3); // 1번째 위치에 2개의 3값을 삽입
- v.erase(iter); // iter가 가리키는 원소 제거
- v.empty();
정렬(sort)
- sort(v.begin(), v.end());
- sort(v.begin(), v.end(), greater<int>()); // <functional> 헤더파일 필요
1-1. pair
vector 안에 pair 을 사용하여 second를 기준으로 정렬할 때 쓰는 함수
// second 기준으로 sort
bool sortby2(const pair<int, int> &a, const pair<int, int> &b) {
if (a.second != b.second) {
return a.second < b.second; }
else { return a.first < b.first; }
}
2. stack
- stack<int> st;
- st.push(1);
- st.pop();
- st.top(); // 맨 위 원소 값 출력
- st.empty();
- st.size();
3. queue
- queue<int> q;
- q.push(1);
- q.pop();
- q.front(); // 맨 앞 원소 값 출력
- q.empty();
- q.size();
4. deque
- deque<int> dq;
- dq.push_front(1);
- dq.push_back(2);
- dq.pop_front();
- dq.opo_back();
5. set
- set<int> s;
- s.insert(10);
- s.find(10); // 10값을 가지는 원소를 찾기
6. tuple
: 순서가 있는 두 개 이상의 서로 다른 정렬된 값들의 모임.
반환값이 두 개 이상일 경우에 사용하면 효율적이다.
- tuple<int, string, int> t1 = make_tuple(1, "플렉시뉴", 001);
- get<0>(t1) // 1
- get<1>(t1) // 플렉시뉴
- get<2>(t1) = 002 // 001 -> 002 로 변경
관련 문제