목록C++/stl (7)
서의 공간
llvm-project/algorithm at release/12.x · Seoui/llvm-project (github.com) 사전순 기준 next_permutation 과정 1. 컨테이너의 마지막 원소부터 시작하여 가장 긴 감소수열을 찾는다. 2. 그 수열의 바로 앞 원소를 a라고 할 때, 다시 마지막 원소부터 시작하여 a보다 처음으로 큰 원소를 찾는다. 3. 그 둘을 스왑 4. 가장 긴 감소수열을 reverse prev_permutation도 이러한 맥락으로 이해하면 되겠다. // Compare 함수객체는 default가 less이다. template bool __next_permutation(BidirectionalIterator first, BidirectionalIterator last, C..
libstdc++: stl_heap.h Source File (gnu.org) is_heap 함수의 기능은 주어진 컨테이너가 max heap인지 판단한다. 람다 함수에서 부등호 방향만 바꾸어주면 min heap인지 판단. template RandomAccessIterator isHeapUntil(RandomAccessIterator first, RandomAccessIterator last) { auto comp = [](RandomAccessIterator first, RandomAccessIterator last) { return *first < *last; }; int dist = std::distance(first, last); return first + _isHeapUntil(first, dis..
template void generate_n(OutputIterator fisrt, Size n, Generator gen) { while (n > 0) { *first = gen(); ++first; --n; } } 여기서 Generator는 말그대로 Generator 기능을 가진 클래스이고, 컨테이너를 순차적으로 돌면서 각 원소에 Generator로 객체를 할당해준다.
std::find() template inline InputIterator find(InputIterator first, InputIterator last, const Tp val) { while(first != last && !(*first == val)) ++first; return first; } while문은 first == last 또는 *first == val 일 때 종료된다. 다음은 find 함수의 원형을 찾을 때 필요한 파츠 중 하나다. 위 while문의 조건 (*first == val) 부분을 나타낸다. 역시 보기 쉽게 편집했다. // predefined_ops.h template struct _Iter_equals_val { Value& mValue; explicit _Iter_equa..
// 파일이름: stl_algobase.h template pair mismatch(InputIterator1 first1, InputIterator2 last1, InputIterator2 first2, BinaryPredicate binary_pred) { while ( first1 != last1 && binary_pred(first1, first2)) { ++first1; ++first2; } return pair(first1, first2); } 여기서 파라미터 binary_pred를 생략하면 predicate는 equal버전으로 호출한다.
// 아래 코드는 두 수 a, b가 양수라고 가정한다. int GCD(int a, int b) { return a == 0 ? b : b == 0 ? a : GCD(b, a % b); //