#include <vector>
생성자
vector<int> v1;
vector<int> v2(10, -1); // -1이 10개인 배열
vector<int> v3 {1, 2, 3, 4, 5};
assign
vector<int> intVector(10, 0);
intVector.assign(5, 100);
intVector.assign({1, 2, 3, 4});
항목 룩업
vector<int> v {1, 2, 3, 4, 5};
v[2] = 0;
v.at(3) = -1;
v.front() = 2;
v.back() = -3;
반복자
vector의 항목이 삽입되어 capacity가 변경되는 경우 댕글링 포인터 버그가 발생한다.
vector<int> intVector(10, 0);
auto it = intVector.begin();
//vector<int>::iterator it = intVector.begin();
it += 5;
--it;
*it = 4;
vector<int> v1(10), v2(10);
for(auto it = v1.begin(); it != v1.end(); ++it)
{
}
for(auto& item : v1)
{
}
항목 삽입
vector<int> v;
v.reserve(5);
for(int i = 0; i < 5; i++)
{
v.push_back(10);
}
vector<int> v2;
v2.reserve(10);
for(int i = 0; i < 5; i++)
{
v.push_back(1);
}
v.insert(v.begin(), 2); // 0 위치에 2 삽입
v.insert(v.begin() + 2, 2, 3); // 2 위치에 3을 2번 삽입.
v.insert(v.end(), {4, 5}); // 맨 뒤에 4, 5 삽입.
struct point {int x, y;};
vector<point> v;
v.reserve(2);
v.emplace_back(1, 2);
v.emplace(v.begin(), 3, 4);
항목 삭제
vector<int> v {1, 2, 3, 4, 5};
v.pop_back();
v.erase(v.begin() + 1); // 1번 위치 값 삭제
v.erase(v.begin(), v.end() - 1); // 0번 위치부터 맨 뒤 한자리 앞까지 모두 삭제
v.clear() // 전체 삭제.
vector<int> v1 = {1, 2, 3, 1, 1, 1};
auto it = remove_if(v1.begin(), v1.end(), [](int num){ return num == 1; })
v1.erase(it, v1.end());
// v1 = {2, 3}
비교 연산
==, !=, <, >, <=, >= 연산자 사용 가능.
#include <list>
생성자
list<string> lst = {"String1", "String2", "String3"};
항목 룩업
반복자
항목 삽입/삭제
유용한 메서드
list<int> list1 {1, 4 ,5}, list2 {2, 3};
auto splicePos = next(list1.begin(), 1);
list1.splice(splicePos, list2); // list1 = {1, 2, 3, 4, 5}
#include <deque>
#include <queue>
생성 및 비교
#include <deque>
#include <list>
queue<int> q1;
deque<int> dq{ 1, 2, 3, 4, 5 };
queue<int> q2{ dq };
list<int> l{ 1, 2, 3, 4, 5 };
queue<int, list<int>> q3{ l };
룩업
삽입
삭제
#include <queue>
생성
priority_queue<int> pq1; // max heap
priority_queue<int, vector<int>, greater<int>> pq2(data.begin(), data.end()); // min heap
// 비교함수를 직접 전달.
auto cmp = [](int left, right) {return (left ^ 1) < (right ^ 1);}
priority_queue<int, vector<int>, decltype(cmp)> pq3(cmp);
메소드
#include <stack>
auto ptr = find(arr, arr + 10, 7);
auto it = find_if(v.begin(), v.end(), [](int a){ return a > 10; })
// 찾지 못하면 v.end() 반환.
auto min_it = min_element(v.begin(), v.end());
auto minmax_it = minmax_element(v.begin(), v.end());
// minmax_it.first, minmax_it.second
정렬된 항목열에 적용 가능
#include <algorithm>
sort(v.begin(), v.end());
bool check = binary_search(v.begin(), v.end(), 77); // 77이 있는 지 없는 지
auto range = equal_range(v.begin(), v.end(), 77);
// range.first, range.second
replace(v.begin(), v.end(), a, b); // a를 b로 replace
replace_if(v.begin(), v.end(), [lower](int i) {return i < lower;}, lower);
unique
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end(), v.end()));
next_permutation, prev_permutation
항목들의 다음 순열 조합, 이전 순열 조합으로 변환.
마지막 조합에 도달한 경우 false, 이외에는 true 리턴.
string s = "aba";
sort(s.begin(), s.end());