copy
왼쪽의 컨테이너의 원소를 오른쪽 컨테이너로 복사한다.
stl의 컨테이너들은 기본적으로 = 연산자가 있어 복사가 가능하지만,
범위를 기반으로 복사해 보다 유연하게 복사할 원소를 선택할 수 있다.
시간복잡도는 O(n)이다.
vector<int> str1 = {1, 2, 3, 4, 5}; vector<int> str2(5); copy(str1.begin(), str1.end(), str2.begin());
sort
범위의 원소들을 정렬하는 함수이다.
기본적으로 인트로소트(Introsort)를 사용하여 높은 성능과 안정성을 보장한다.
인트로소트는 퀵정렬, 힙정렬, 삽입정렬을 혼합한 정렬 알고리즘이다.
vector, deque, array 등 인덱스 접근이 가능한 컨테이너에서만 사용 가능하다.
시간복잡도는 O(n log n)이다.
vector<int> str = {5, 3, 4, 2, 1}; sort(str.begin(), str.end()); for(auto i : str){ cout << i << ' '; // 1 2 3 4 5 }
equal
두 범위가 같은지 비교하는데 사용되는 함수이다.
범위 내의 원소가 같은지 비교하고 bool값을 리턴한다.
vector<int> str1 = {1, 2, 3, 4, 5}; vector<int> str2 = {1, 2, 3}; if(equal(str1.begin(), str1.begin() + 3, str2.begin())){ cout << "equal"; }
find
범위 안에서 원하는 값 중 처음으로 만나는 값의 위치를 반환하는 함수이다.
해당 원소가 있으면 해당 원소 위치의 iterator를 반환하고, 없으면 end를 반환한다.
시간복잡도는 O(n)이다.
vector<int> str = {1, 2, 3, 4, 5}; if (find(str.begin(), str.end(), 3) != str.end()) { cout << "exist"; }
reverse
범위 안의 원소들을 역순으로 정렬하는 함수이다.
vector<int> str = {1, 2, 3, 4, 5}; reverse(str.begin(), str.end()); for (auto i : str) { cout << i; // 5 4 3 2 1 }
unique
범위 안에 중복된 원소를 제거하는 함수이다.
중복된 원소를 제거한 이후 중복이 제거된 범위의 끝을 반환한다.
vector<int> str = {1, 2, 2, 3, 4}; cout << *unique(str.begin(), str.begin() + 4); // 3
iota
범위 안에 연속된 원소를 채운다. numeric 헤더를 추가해야 한다.
첫 원소의 값을 설정하고, 그 값에서 1씩 증가한 원소들이 추가된다.
값이 증가한다는 개념이므로, 자료형이 한정되진 않는다.
시간복잡도는 O(n)이다.
vector<int> str1(5); vector<char> str2(5); iota(str1.begin(), str1.end(), 1); iota(str2.begin(), str2.end(), 'a'); for (auto i : str1) cout << i; //12345 for (auto i : str2) cout << i; //abcde