목록C++ (19)
서의 공간
1. 전방 선언 2. 인터페이스 이용 [C++]인터페이스를 이용하여 상호참조와 종속성을 최소화하는 방법 (tistory.com)
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로 객체를 할당해준다.
#include #include using namespace std; /* optional 예제 함수의 리턴값이 존재하는지 안하는지에 따라 조건식을 구성할 수 있다. */ int branchNum = 0; optional GetIntOptional() { if (branchNum > 10) return branchNum; return {}; } int main() { while (true) { cout > branchNum; // if문의 참 조건은 GetIntOptional()의 리턴값이 int일 경우에 참이다. // int일 경우만 if문을 실행한다. int가 아니라면 거짓이 됨. // while문은 10 이상의 숫자를 대입할 경우에만 종료가 된다. if (auto result = GetIntOpti..
1. 내부 싱글톤 클래스 #include using namespace std; /* 내부 private한 싱글톤 클래스의 사용방법임. chili window클래스의 핵심이므로 계속 참고할 것. */ class OuterClass { public: class InnerClass { public: InnerClass() { cout
C/C++은 nested subroutine을 지원하지 않습니다. 이는 언어를 간단하게 만들기 위하여 취한 조치라고 볼 수 있겠죠. 말씀하신 것처럼 nested subroutine을 지원하게 될 경우, referencing environment를 설정하기 위해 함수호출시에 상당한 오버헤드가 발생하게 됩니다. 말씀하신 것처럼 main()안에서 fun()을 정의한다고 할때, 다음과 같은 변수 선언이 이루어진다고 하면, void main() { int i, j; // (1) void fun() { int j; // (2) i = 0; // (1)의 i에 값을 할당합니다. j = 1; // (2)의 j에 값을 할당합니다. } fun(); } 이때, i는 main()내에서 선언된 변수이므로, main()안에 있는..
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버전으로 호출한다.