#include <algorithm>
fill(begin, end, 값);vector<int> Tmep(3, 1); // 1, 1, 1
fill(Temp.begin(), Temp.end(), 2); //2, 2, 2가 됨
int arr[5]; // 배열도 가능하다.
fill(arr, arr + 5, 3);
_EXPORT_STD inline constexpr _Fill_fn fill; // inline으로 치환된다.
class _Fill_fn {
public:
_STATIC_CALL_OPERATOR constexpr _It operator()(_It _First, _Se _Last, const _Ty& _Value)
/*
길고 복잡한 코드 생략
*/
auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));
const auto _ULast = _RANGES _Unwrap_sent<_It>(_STD move(_Last));
for (; _UFirst != _ULast; ++_UFirst) {
*_UFirst = _Value;
}
반복문으로 순회하면서 값 채운다.
하지만 이터레이터를 실제 포인터로 바꾸는 효율적인 연산이 구현돼있다.
(_RANGES _Unwrap_iter)
bool sizesort(string szSrc, string szTmp)
{
if (size(szSrc) == size(szTmp))
return szSrc[0] < szTmp[0];
return size(szSrc) < size(szTmp);
}
int main()
{
int iNum;
string szWord[20000];
cin >> iNum;
for (int i = 0; i < iNum; ++i)
{
cin >> szWord[i];
}
sort(szWord, szWord + iNum, sizesort);
return 0;
}
표준 라이브러리에 정의돼있는 비교 함수가 정의돼있는 템플릿 구조체가 있다.
greater<타입>
추적해서 들어가보면 템플릿 구조체인데, 비교함수가 내부에 정의돼있어서 sort 에 사용할 수 있다.
vector<int> temp
sort(temp.begin(), temp.end(), greater<int>());
배열을 넣으면 이전/다음 크기의 순열로 순서를 바꿔준다.
bool prev_permutation(순열의 시작, 끝);
bool next_permutation(순열의 시작, 끝);
다음 순서 순열이 없으면 false 반환
int Temp[3] { 0, 1, 2 };
do
{
for (int i : Temp)
cout << i << ' ';
cout << endl;
} while (next_permutation(Temp, Temp + 3));
원소들을 알아서 정렬해주니까 그걸 출력하기만 하면 된다.

rotate(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last)
_First: 원소를 가져다 둘 시작점
_Mid: 옮길 원소가 있는 시작점
_Last: 옮길 원소가 있는 마지막
셋 다 이터레이터로 줘야 한다.
_Mid부터 _Last까지의 원소를 _First로 민다.
vector<int> Temp = {1,2,3,4,5};
rotate(Temp.begin(), Temp.begin() + 2, Temp.begin() + 4);
//결과: 3 4 5 1 2
내부적으로 reverse를 세번 사용한다.
1. 첫 번째 구간 뒤집기
2. 두 번째 구간 뒤집기
3. 전체 뒤집기
12345로 시작하는 위의 코드를 예시로 든다면
21345
21543
34512 -> 완성!