C++
-
[ Anything ] - Iterator - 2C++ 2021. 9. 8. 14:13
Iterator은 크게 Input, Output, Forward, Random Access, Bidirectional iterator로 갈래가 나누어 집니다. 이전엔 input/output에 대해 공부를 했습니다. 나머지도 살펴보도록 합니다. Forward Iterator 대표적으로 사용하는 Algorithm library의 함수 중 하나입니다. 온통 Forward iterator 타입의 오브젝트들로 가득합니다. 이전에 보았던 iterator들의 hierarchy관계도를 보면 알 수 있지만 Forward iterator는 input/output iterator의 조합과 같습니다. input iterator의 access와 output iterator의 assign을 모두 지원한다는 뜻이기도 합니다. 주목..
-
[ Anything ] - Iterator - 1C++ 2021. 9. 7. 17:13
C++에서 자주 사용하는 Iterator입니다. 이 Iterator는 우리가 사용하거나 만든 알고리즘을 STL[Standard Template Library]와 이어주는 일종의 다리의 역할을 하며 C++STL의 주축을 이루는 요소 중 하나입니다. 이 Iterator는 Container의 특정한 메모리 주소를 가리킬 수 있으며 종류에 따라서 Read/Write을 수행할 수 있습니다. 예를 들어서 다음과 같은 Class을 임의로 만들었다고 가정해봅시다. 물론 불완전하긴 하지만 STL의 Algorithm의 여러 함수가 요구하는 Iterator들이 구현이 되어 있기 때문에 Vertex에 필요한 operator을 구현하기만 하다면 정렬이나 제거, 복사 등 유용한 기능들을 활용할 수 있습니다. 그렇기 때문에 Ite..
-
-
[2] - Templates - 2C++ 2021. 8. 8. 14:05
SFINAE[Substitution Failure is Not an Error] Ref 1. (https://en.cppreference.com/w/cpp/language/sfinae) -> Definition of the SFINAE 2. (https://en.cppreference.com/w/cpp/language/overload_resolution) -> SFINAE applies during this Overload Resolution. 3. (https://en.cppreference.com/w/cpp/language/adl) -> In order to compile a function call, the compiler must first perform name lookup which may i..
-
[1] - Templates - 1C++ 2021. 8. 5. 23:04
Ref 1. (https://www.geeksforgeeks.org/generics-in-c/) : Generics in C++ 코드의 재사용성 향상, Function overloading의 최소화. 데이터 타입에 따라 같은 코드를 반복할 필요가 없습니다. コードの再利用性向上、Function Overloadingの最小化。データタイプによる重複コード最小化。 2. (https://www.geeksforgeeks.org/templates-cpp/) 3. (https://levelup.gitconnected.com/advanced-c-templates-tutorial-7b54259b2671) 4. (https://www.geeksforgeeks.org/templates-and-static-variables-in-..
-
[ Anything ] - Object SlicingC++ 2021. 5. 20. 19:41
Object Slicing 다음과 같은 짧은 코드가 있다고 가정 해봅시다. 언뜻 보기에는 똑같은 결과가 나올 것 같습니다. 실행결과는 그렇지 않습니다. reference로 받은 함수는 정상적으로 모든 정보를 출력해주었으나 call by value로 받은 함수는 age만 제대로 출력이 된 것을 확인할 수 있습니다. Virtual table and Virtual pointer 먼저 vtbl과 vptr이 무엇인지 살펴보아야 합니다. 컴파일러는 이 가상함수들을 다룰 때 각 object들에 우리가 모르는 사이에 어떤 포인터를 달아서 관리합니다. 그리고 이 포인터들은 함수들의 주소가 보관되어 있는 static array로 이어지며 Compile time에 생성되는 이 배열에는 가상함수테이블[Virtual Funct..