C (101) 썸네일형 리스트형 c++ Union, Variant Union은 메모리 세이빙에 좋다. 하지만 Union은 개발자가 신경써야 하는 부분이 많기 때문에 아주 조심히 사용해야 한다. 즉, std::variant를 쓰는 것이 안전하다 std::variant는 type tracking이 매번 type을 체크하기 때문에 내부적으로 type을 체크하는 변수가 들어간다. 따라서 overhead가 발생할 수 있다. 즉 std::variant는 하나의 공간 안에 다양한 타입을 안전하게 넣어줄 수 있다. 코드 >> 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.. C++ enum class(매우 중요) 선택지가 제한된 타입에서는 무조건 Enum을 쓰자. 정답 : 1,2,3,4,5 같은 것들 말이다. 인자를 string이나 int 같은 것으로 받는 경우에는 버그가 생기기 쉽다. 코드 >> 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 #include // 인자를 string으로 받으면 버그가 발생하기 쉽다 // 따라서 enum을 사용하도록 하자 // 선택지가 객관식이라면 Enum을 사용하도록 하자 enum class Clothing_size{small, medium, large}; enum class Clothing_color{red, blue, yell.. c++ optional (C++17부터 지원) optional의 메모리 구조는 int num = 10; std::optional num1 = 20; 이라면 stack에 num = 20 말고도, valid or invalid가 따로 저장된다. 따라서 기본 int 보다 약간 사이즈가 더 크다. 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 77 78 79 #include #include std::optional d.. c++ tuple, pair tuple, pair 대신에 struct로 정의하는 것이 올바르다. 하지만 임시적으로 해당 기능을 잠깐 사용하고자 한다면 tuple이나 pair를 고려해 보자. 코드 >> 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 #include #include #include //pair나 tuple 보다는 struct를 만드는 것이 맞다. // 하지만 임시적으로 쓰인다면 pair나 tuple을 고려해 보자 std::pai.. c++ float 조심할 점 float은 정확한 값이 아니라 근사값이다. 예를 들어서 0.7f 가 정확한 0.7이 아니라 0.6999931414 이런 숫자일 수 있다. 따라서 == > 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 #include #include #include #include // float에서는 == c++ stl heap 기록 stl의 heap 기능을 활용해서 임의의 벡터를 힙 구조로 변경해 줄 수 있다. std::make_heap(first iter, last iter)를 활용해서 벡터를 힙으로 변경 가능하다. (시간복잡도 : O(N)) std::pop_heap(first iter, last iter)를 활용해서 벡터의 최댓값을 맨 아래로 정렬 가능하다. (시간복잡도 : O(LogN) vector.pop_back()을 활용해서 맨 아래 있는 원소를 제거 가능하다. vector.emplace_back(element)를 활용해서 힙에 원소를 넣어줄 수 있다. std::push_heap(first iter, last iter)을 사용하면 emplace_back으로 넣은 원소가 포함된 벡터를 힙으로 바꿔줄 수 있다. 코드 >> 1 .. c++ priority_queue 가장 큰 숫자 3개, 가장 작은 숫자 4개를 골라라 같은 문제가 나오면 priority_queue를 사용하도록 하자. Insertion, pop -> O(Logn) Min or Max -> O(1) Top이 Maximum 값 즉 Pop 하면 최대값이 없어지고 그다음 최대값이 Top으로 간다 Vector로 어떻게 Priority_Queue를 설정하는가 노드의 위치를 기반으로 인덱스를 설정해서 벡터에 넣는다 9 7 5 3 1 벡터에 9 7 5 3 1 순서로 입력한다. L = 2*idx+1 이고 R = 2*idx+2 이다. 그리고 만약 새로운 값이 들어 오면 bubble 인덱스를 통해서 순서가 조정된다. 만약 pop 명령어로 최상단의 값이 사라지면 먼저 top 바로 밑에 있는 노드가 올라가게 되고, 노드간 비.. c++ stack, Queue stack과 Queue는 Array를 활용해서 직접 구현하도록 한다. 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 #include #include #include /// /// Queue와 Stack은 성능을 위해서 Vector나 Array를 활용해서 직접 구현한다. /// /// /// int main() { // Stack std::stack nums; nums.emplace(1); nums.emplace(3); nums.emplace(5); std::cout 이전 1 ··· 4 5 6 7 8 9 10 ··· 13 다음