분류 전체보기 (158) 썸네일형 리스트형 c++ vector를 활용한 binary search 정렬된 벡터에서의 binary search를 적용하라 Binary search의 Time complexity는 O(logn)이다. 코드>> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 #include #include #include #include // binary search : O(Logn) // 정렬된 데이터에서 binary search를 적용하라 int search(std::vector nums, int target) { int left = 0; int right = (int)nums.size() - 1; int pivot; wh.. c++ stable sort, unstable sort stable sort : merge sort unstable sort : quick, heap sort 코드 >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 #include #include #include #include // stable sort : merge // unstable sort : quick, heap struct Employee { int age; char name; }; bool operator quick, heap std::array nums = { 0,1,.. c++ 클래스, fstream(파일인풋), stringstream(스트링인풋) 코드 >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #include #include #include #include class Cat { public: Cat(std::string name, int age) : mName{ std::move(name) }, mAge{ age } {}; void print(std::ostream & os) { os c++ 다운캐스팅 시 static cast 절대 쓰지 말자, dynamic_cast RTII를 피하라 RTII(Run time type information) static_cast는 절대 쓰지 말자. type이 같지 않은 것을 conversion 하여 프로그램이 터질 수 있다. 그나마 안전한 것이 dynamic_cast이다. dynamic_cast는 타입이 같지 않으면 nullptr을 반환한다. 코드 >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 .. c++ class에서 object slicing 문제 발생 코드 >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 #include class Animal { public: Animal() = default; Animal& operator=(Animal other) = delete; virtual void speak() { std::cout c++ pure virtual function, abstract class, multiple inheritance code pure virtual function은 Base 클래스 함수 = 0 과 같이 선언한다. pure virtual function이 하나라도 존재하면 그 클래스는 abstract class다. abstract class는 하위 클래스가 pure virtual function을 override 해 주지 않으면 그 클래스는 선언이 불가능하다. 유지보수 측면에서 보면 Interface가 되는 기본 Base class에는 implementation이나 member variable 선언을 해 주지 않는다. 그리고 모든 메소드를 pure virtual로 만드는 것이 유지보수 측면에서 매우 유리하다. 코드 >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 .. C++ 클래스 상속에서의 virtual table 코드 만약에 클래스 상속 시 Virtual Table을 사용하면 클래스의 사이즈가 기존보다 늘어난다. 왜냐하면 virtual table pointer 가 클래스에 추가로 생기기 때문이다. 코드 >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 #include #include class Animal { public: void speak() { std::cout c++ 상속 런타임에 결정되는 virtual, override, polymorphism, upcast c++에서 클래스 상속 시 virtual 함수는 runtime 시간에 결정되게 만든다. 상속받는 함수를 override 할 때는 끝에 override를 붙인다. 그리고 destructor는 runtime에 소멸 되므로 virtual 로 만들어야 한다. upcast는 상위클래스* polycat = new 하위클래스와 같은 형식인데. (downcast)는 Cat* cat = (Cat*) polycat 과 같은 형식으로 한다 업캐스트를 하면 상위 클래스로 하위 클래스들을 한번에 다룰 수 있다. 다만 virtual로 함수를 만들어 주어야 조작이 된다. 코드 >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 .. 이전 1 ··· 5 6 7 8 9 10 11 ··· 20 다음