Graphics
-
[45] - Multithreading Execution PolicyGraphics 2021. 8. 11. 23:57
Cppreference를 통해 C++의 다양한 기능들을 살펴보면서 자주 마주쳤던 단어인 Execution policy입니다. 예를 들면 다음과 같은 곳에서 자주 등장했습니다. Template Parameter list를 보면 나옵니다. 사족을 다 떼고 Execution Policy의 핵심만 정리하면 어떤 알고리즘에 대해서 다중코어를 사용하여 병렬처리를 할 수 있도록 만든다는 것입니다. 여태, 이 부분을 무시하고 알고리즘을 작성했기 때문에 Defualt 값으로 모든 알고리즘은 Single Threaded이며 단일 코어에서 동작했습니다. 그러나 Execution Policy를 통해서 다른 알고리즘을 선택한다면 다중 코어로 알고리즘을 처리하게 됩니다. 이 전에 실험적 코드를 작성하며 한 번 사용한 적이 있는 ..
-
[44] - Container Adaptors, Priority QueueGraphics 2021. 8. 11. 16:25
이건 에 있는 건 아닙니다. 각각 필요한 헤더가 다릅니다. 이들은 기본적으로 어떤 컨테이너들을 감싸는 Wrapper에 가깝습니다. 아래가 Container Adaptors의 종류입니다. 이 어댑터들은 다음과 같은 컨테이너들을 감쌀 수 있습니다. Container Adaptors에 대한 설명란에 provide different interface for sequential containers라고 명시되어 있기 때문에 다음과 같은 associative container에는 해당 사항이 없을 것입니다. 이 Container Adaptors는 상당히 엄격하고 제한된 기능만을 제공합니다. 예를 들면 std::stack이 std::vector를 wrap하고 있더라도 결코 std::vector의 random acces..
-
[43] - Heap OperationsGraphics 2021. 8. 11. 15:41
자료구조나 알고리즘에서 등장하는 heap이 맞습니다. Memory의 heap을 가리키는 말이 아닙니다. 당시에 배웠던 heap의 성질에는 다양한 것들이 있는데 그 중에 기억해야 할 것 중 하나는 heap의 최상단에 가장 큰 값이 오는 max heap, 반대의 min heap이 존재한다는 것입니다. heap은 주로 tree의 형태로 개념화/상징화 됩니다. 이것은 Data Structure에서 더 자세히 다루기 때문에 여기서 할 필요는 없을 것 같습니다. Data structure를 공부하면서 배우는게 낫지만 heap이 중요한 이유는 이를 바탕으로 priority queue를 만들 수 있다는 점입니다. 특히 알아두면 좋은 것이 'A-star pathfinding' Algorithm에서도 쓰이며 heap-so..
-
[42] - Set operationsGraphics 2021. 8. 11. 14:48
이제 살펴볼 것들이 많이 남지 않았습니다. std::merge는 서로 다른 두 컨테이너를 합쳐주는 함수입니다. 두 컨테이너에 격납된 요소들을 취합하여 정렬을 한 다음 새로운 컨테이너에 격납한다고 합니다. 정렬을 안 하고 수행하면 아래와 같은 엉망진창 결과를 얻습니다. 하지만 정렬을 하고 merge하면 만족스러운 결과를 얻습니다. std::set_difference, set::set_intersection, std::set_symmetric_difference 기초 집합이론에 나오는 내용 그대로입니다. 두 개의 컨테이너의 요소들에 대해서 집합 연산을 해줍니다. 한 번 두 집합의 Union을 찾는 예제를 해봅시다. 이것도 정렬이 안 된 컨테이너에 대해 실시하면 엉망진창 결과를 얻습니다. 특별한 능력을 하나 ..
-
[41] - Binary SearchGraphics 2021. 8. 11. 13:28
Sorting을 진행한 컨테이너에 대해서 실시할 수 있는 몇 가지 Algorithm들이 존재합니다. 그 중에 하나가 Binary Search이며 merge, include 등등의 operation도 수행할 수 있습니다. 몇 가지 함수들이 존재합니다. 한 가지 주의해야 할 점은 이 std::binary_search는 찾는 요소의 iterator를 반환하는 것이 아니라 Boolean을 반환하는 함수로써 컨테이너 내부에 격납 여부만 판단해 줄 수 있다는 점입니다. 대신에 std:lower_bound와 std::upper_bound라는 함수가 존재합니다. 이들이 iterator를 반환합니다. 대신에 원하는 값을 반환하는 것이 아니라 그것 작지는 않으면서 전체집합 중에서는 가장 작은 요소의 Iterator를 반환..
-
[40] - SortingGraphics 2021. 8. 11. 12:14
이 내용은 algorithm lectures 등지에 출현하는 내용이며 D3D의 기본과 관련성이 다소 떨어질 것 같습니다. 그럼에도 불구하고 Algorithm이기 때문에 header에 있는 내용이기도 합니다. cppreference 홈페이지에 보면 이렇게 sorting을 위한 Section이 따로 있습니다. 'Sort'라는 이름이 기능 자체를 설명하기 때문에 뭔가 기록할 만한 것이 없습니다. 정렬의 시간 복잡도가 O(Nlog(N))이라는 점은 알아두는 것이 좋습니다. 그리고 Sort는 오름차순으로 정렬을 진행하는 것이 기본값이기 때문에 세 번째 인자에 Functor를 주어서 내림차순으로 만들 수 있습니다. 편리한 함수이기는 하지만 Custom Defined Data Type에 대해서는 비정상적으로 작동할 ..
-
[39] - PartitionGraphics 2021. 8. 10. 20:21
Partitioning Operations 이번에 공부할 것은 주로 std::partition에 관련한 내용일 것입니다. 설명은 어떤 격납고[container, 컨테이너 등등]를 두 개로 나눌 수 있다고 되어 있습니다. 해당 함수의 Parameter와 return value를 좀 살펴보면 어떤 컨테이너의 범위[range]를 받고 그룹이 두 개로 나뉘는 지점에 해당하는 iterator를 반환한다고 합니다. Unary Predicate를 기준으로 false/true를 나누어서 그룹을 나눌 수 있도록 설계되어 있는 듯 합니다. 간단하게 작성을 해봤습니다. 애초에 컨테이너가 정렬이 되는 것 같습니다. 컨테이너 전체를 출력하면 다음과 같은 결과를 얻습니다. 보면 5와 Funf를 기준으로 Pred의 기준에 부합 여..
-
[38] - PermutersGraphics 2021. 8. 10. 16:35
std::rotate, std::shuffle, std::reverse 등등은 여태 공부한 함수와는 다르게 어떤 값을 변화시키지는 않습니다. 임의의 컨테이너[Container] 내의 원소들의 위치를 바꿀 뿐입니다. std::reverse는 말 그대로 컨테이너 내의 원소들의 순서를 반전합니다. std::reverse 깔끔하며 군더더기 없습니다. std::shift_left / std::shift_right 자명한 함수입니다. 아쉽게도 C++20 표준이며 현재 사용하는 GCC는 해당 함수를 지원하지 않습니다. 실험을 해볼 수 있는 방법이 다양하게 존재하긴 합니다. (https://en.cppreference.com/w/cpp/algorithm/shift)에 가면 테스트 코드를 실험할 수 있는 컴파일러를 제공..