STL이란?

  • STL템플릿 기반의 데이터 구조와 알고리즘을 제공하는 라이브러리입니다.
  • STL을 사용하면, 프로그래머는 데이터를 저장하고 처리하는 데 필요한 표준화된 도구를 활용할 수 있습니다.
  • 장점:
    1. 코드 재사용성 향상.
    2. 안전하고 빠른 데이터 구조 및 알고리즘 제공.
    3. 타입에 독립적인 템플릿 기반 설계.

종류?

컨테이너(Containers)

(1) 순차 컨테이너 (Sequence Containers)

컨테이너설명예시

vector 동적 배열 vector<int> v;
deque 양방향에서 빠른 삽입/삭제가 가능한 배열 deque<int> d;
list 이중 연결 리스트 list<int> l;
array 크기가 고정된 정적 배열 array<int, 5> arr;

(2) 연관 컨테이너 (Associative Containers)

컨테이너설명예시

set 중복되지 않는 정렬된 데이터 집합 set<int> s;
multiset 중복 허용 정렬 데이터 집합 multiset<int> ms;
map 키와 값의 쌍으로 저장된 정렬된 데이터 map<int, string> m;
multimap 중복 키를 허용하는 키-값 쌍 multimap<int, string> mm;

(3) 비정렬 컨테이너 (Unordered Containers)

컨테이너설명예시

unordered_set 정렬되지 않은 고유 값 집합 unordered_set<int> us;
unordered_map 정렬되지 않은 키-값 쌍 unordered_map<int, string> um;

 

 

컨테이너는 데이터를 담아두는 그릇이라고 생각하면 됩니다.

데이터를 보관하는 방법에 따라 여러가지 종류가 있습니다.

ex)

컨테이너비유역할

vector 길이가 늘어나는 배열 데이터를 순서대로 저장 (ex: 리스트).
list 이중 연결 리스트 순서대로 저장 + 빠른 삽입/삭제.
map 사전 키(key)와 값(value)을 저장.

 

ex)

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> v = {10, 20, 30};  // 데이터를 순서대로 저장
    v.push_back(40);              // 데이터 추가
    for (int x : v) {
        cout << x << " ";         // 출력: 10 20 30 40
    }
    return 0;
}

 

이터레이터는 데이터를 하나씩 꺼내는 도구(집게)라고 생각하면 됩니다.

ex)

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> v = {1, 2, 3, 4};

    // 이터레이터 사용
    for (auto it = v.begin(); it != v.end(); ++it) {
        cout << *it << " ";  // 출력: 1 2 3 4
    }

    return 0;
}

 

알고리즘은 무엇으로 비유할 수 있을까?

물건을 정리하는 방법이라고 생각하시면 됩니다.

 

컨테이너에 저장된 데이터를 처리하는 방법입니다.

  • 정렬(sort): 데이터를 오름차순 또는 내림차순으로 정렬합니다.
  • 검색(find): 특정 요소를 찾습니다.
  • 변환(transform): 데이터를 변환합니다.

ex)

#include <iostream>
#include <vector>
#include <algorithm>  // 알고리즘 헤더
using namespace std;

int main() {
    vector<int> v = {5, 2, 8, 1, 3};

    sort(v.begin(), v.end());  // 데이터를 오름차순으로 정렬

    for (int x : v) {
        cout << x << " ";  // 출력: 1 2 3 5 8
    }

    return 0;
}