vector, list, map, set 등등#include <iostream>
#include <vector>
#include <list>
using std::vector;
using std::list;
int main()
{
vector<int> vla;
list<int> linkedList;
return 0;
}
이렇게 제공하는데도 직접 만들어본 이유
1. 기존에 배운 것들을 활용하여 충분히 자료구조를 만들어볼 수 있음.
2. 자료구조에 대한 이해
vector<int> vla;
vla.push_back(10);
vla.push_back(20);
vla.push_back(30);
vla[0] = 100;
int value = vla.at(1); // 함수 버전
vla.data();
vla.size();
vla.capacity();
vla.push_back(10); : 구현했던 것과 동일하게 작동할 것vla[0] = 100; : 연산자 오버로딩으로 바로 접근하는 것을 구현해둔 것.int value = vla.at(1); : 이 기능의 함수 버전vla.data(); : 가변 배열이 가진 힙 메모리의 시작 주소.vla.size(); : 현재 갯수vla.capacity(); : 힙 메모리에 할당된 메모리의 크기 list<int> linkedList;
linkedList.push_back(1000);
linkedList.push_back(2000);
linkedList.push_front(10);
linkedList.size(); //
linkedList.push_back(1000);, linkedList.push_front(1000); list<int>::iterator iter;
iter = linkedList.begin(); // 리스트의 첫번째 데이터를 가리키도록 함.
int val = *iter; // 포인터처럼 동작하는데 본래는 클래스임. 즉, 연산자 오버로딩임.
list<int>::iterator iter; 리스트 안에 구현되어 있는 반복자 클래스. (inner class. 포함 클래스)int val = *iter; : 포인터처럼 동작하는데 본래는 클래스임. 

multisetvector빠른 탐색과 정렬 필요 시 : multiset.
빠른 인덱스 접근 필요 시 : vector.
#include <bits/stdc++.h>
using namespace std;
int main() {
multimap<int, string> mm = {{1, "Geeks"},
{2, "For"}, {1, "C++"}};
// Traverse multimap
for(auto it = mm.begin(); it != mm.end(); it++)
cout << it->first << " " << it->second
<< "\n";
return 0;
}
1 Geeks
1 C++
2 For
<algorithm>, <numeric> 헤더에 선언돼 있음.copy : 컨테이너의 특정 순서부터 n개에 해당하는 데이터들을 다른 컨테이너로 복사.fill : 지정 범위의 모든 요소들을 특정 값으로 채움.transform : 지정 범위의 각 요소들에 함수 연산을 적용하고 그 결과를 다른 범위에 저장한다.replace : 지정 범위의 값들을 모두 새로운 값으로 교체함.swap : 두 변수를 서로 교환함.reverse : 범위의 요소들의 순서를 반전시킴.rotate : 지정한 범위에서 특정 값이 가장 앞으로 오도록 순서를 바꿈.remove : 지정한 범위에서 특정 값을 제거함.unique : 범위에서 연속해서 중복되는 값을 제거함.max_element : 주어진 범위에서 가장 큰 요소를 찾음.min_element : 주어진 범위에서 가장 작은 요소를 찾음.accumulate : 주어진 범위에서 요소들의 합을 구함.count : 범위 내에서 특정 값의 갯수를 구함.find : 범위 내에서 특정 값을 찾고, 가장 먼저 나온 위치의 iterator를 반환.is_permutation : 한 범위가 다른 범위의 순열인지 확인함.is_sorted : 범위 내 요소들이 감소하지 않는 순서로 정렬되어 있는지 확인함.partial_sum : 특정 범위의 요소들의 부분 합을 계산함.iterator 헤더에 선언되어있음.++ 증가 연산자로 순방향 이동만 가능.* 역참조를 통해 값을 읽어올 수 있음.Find()template<class InputIterator, class T>
InputIterator Find(InputIterator first, InputIterator last, const T& value);++ 증가 연산자로 순방향 이동만 가능.* 역참조를 통해 단 한 번만 값을 쓸 수 있음.Copy()template<class InputIterator, class OutputIterator>
OutputIterator Copy(InputIterator first, InputIterator last, OutputIterator result);++ 증가 연산자로 순방향 이동만 가능.* 역참조로 몇번이고 참조하거나 변경할 수 있음.Replace()template<class ForwardIterator, class T>
void Replace(ForwardIterator first, ForwardIterator last, const T& target, const T& replacement);++, -- 증감 연산자로 순방향, 역방향 이동 가능.* 역참조로 몇번이고 참조하거나 변경할 수 있음.Reverse()template<class BidirectionalIterator, class OutputIterator>
OutputIterator Reverse(BidirectionalIterator first, BidirectionalIterator last, OutputIterator result);[] 첨자 연산자로 임의의 요소에 접근할 수 있음.++, -- 증감 연산자로 양뱡향 이동.* 역참조를 통해 요소 접근 가능>=, >, <, <=, ==, != 비교 연산자 사용 가능 Sort()template<class RandomAccessIterator>
void Sort(RandomAccessIterator first, RandomAccessIterator last);functional 헤더에 STL의 많은 함수 객체들이 선언되어 있음.plus : 두 매개변수의 합을 반환minus : 두 매개변수의 차를 반환multiplies : 두 매개변수의 곱을 반환divides : 두 매개변수를 나누어 몫을 반환modulus : 두 매개변수를 나누어 나머지를 반환negate : 매개변수에 -1을 곱하여 반환equal_to : 두 매개변수가 같다면 true 반환not_equal_to : 두 매개변수가 다르다면 true 반환greater : 두 매개변수 중, 첫번째가 크다면 true 반환greater_equal : 두 매개변수 중, 첫번째가 크거나 같다면 true 반환less : 두 매개변수 중, 첫번째가 작다면 true 반환less_equal : 두 매개변수 중, 첫번째가 작거나 같다면 true 반환logical_and : 두 매개변수에 대한 && 연산의 결과를 반환logical_or : 두 매개변수에 대한 || 연산의 결과를 반환logical_not : 매개변수에 대한 ! 연산의 결과를 반환bit_and : 두 매개변수에 대해 비트 연산자 &의 결과를 반환bit_or : 두 매개변수에 대해 비트 연산자 |의 결과를 반환bit_xor : 두 매개변수에 대해 비트 연산자 ~의 결과를 반환