분류 전체보기
-
[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)에 가면 테스트 코드를 실험할 수 있는 컴파일러를 제공..
-
[37] - GeneratorsGraphics 2021. 8. 10. 14:08
Fill부터 살펴봅니다. 설명대로 어떤 Container를 채워주는 기능을 합니다. std::vector에 대해서 이 작업을 수행할 수도 있습니다. 하지만 벡터의 경우엔 자체적으로 초기화가 가능하며 Fill을 구태여 호출할 필요가 없습니다. 이 함수를 사용할 경우라면 벡터의 크기를 바꾸고 다시 채워넣을 필요가 있을 때 정도일 것입니다. 혹은 기존의 컨테이너 중간에 값을 삽입하거나 하는 기능에 활용할 수도 있습니다. 그런데 std::fill은 일관적인 값으로만 컨테이너를 채워줄 수 있습니다. 그게 아니라면 std::copy를 사용하는 편이 나을 것입니다. 만약 어떤 컨테이너의 특정 구간을 상승하는 값으로 채워주고 싶다면 std::iota를 사용할 수 있습니다. 아래의 실험적 코드를 보면 흥미로운 점이 있는..
-
[36] - find, search, reverse iteratorsGraphics 2021. 8. 10. 12:45
다양한 Overloaded Functions가 존재합니다. 가장 단순한 함수는 Container의 특정 범위 내에서 value의 값을 찾아서 해당 iterator를 반환하는 첫 번째 함수입니다. 그 왜에더 Unary Predicate가지 지원하는 모습을 확인할 수 있습니다. 반환형이 iterator라는 점을 염두에 두고 간단하게 활용하며 몸에 익힙니다. 완전히 일치하지 않는 단어는 찾아주지 못합니다. 예를 들어서 Acht의 'ch'만 입력해서는 찾아주지 못한다는 뜻입니다. 그런 함수가 있는 한편 std::find_first_of라는 함수는 일정 범위 안의 Container에서 다른 Container의 범위에 존재하는 요소가 가장 먼저 발견되면 해당 iterator를 반환합니다. x의 Delimiter 중..
-
[35] - count, all, none_ofGraphics 2021. 8. 9. 22:16
이들에 대해 간략하게 알아봅니다. std::count 위와 같은 형식을 취합니다. 기능은 어떤 척도에 맞는, 특정 범위의 Container 속에 포함된 원소들의 개수를 구합니다. 코드를 조금 써보는 것이 좋겠습니다. 복잡하지도 않고 유용합니다. 벡터 a에는 총 세 개의 2가 있습니다. 그러면 결과는 3이 나와야 합니다. 실제로 코드를 실행하면 3이 나옵니다. 이것보다 훨씬 복잡한 것도 가능할 겁니다. 가령, 단순히 2를 세는 것이 아니라 3보다 크거나 같은 값을 찾아서 출력하는 것도 가능할 것입니다. 왜냐하면 count의 overload function 중에서 (3)번을 보면 마지막 parameter에 UnaryPredicate를 넣을 수 있기 때문입니다. Lambda를 이용하면 될 것 같습니다. 7개가..