기록하는 습관

[C++] STL 정리 본문

알고리즘/[개념] 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 로 변경

관련 문제

'알고리즘 > [개념] C++' 카테고리의 다른 글

[c++] 여러개의 숫자 한줄로 받아 따로 저장하기  (0) 2020.05.08
[C++] memset  (0) 2020.01.21
[C++] Range-based for statement  (0) 2020.01.08
[C++] 순열과 조합  (0) 2020.01.07
[C++] vector & deque  (0) 2020.01.05
Comments