목록C++ (58)
Coding Memo
메타 함수(Meta Function)은 컴파일 타임에 실행되는 함수가 아니라, 컴파일러에서 사용되거나 템플릿 메타 프로그래밍에서 사용하는 함수나 클래스 템플릿을 가리키는 용어이다. 즉, 런타임에서가 아니라, 컴파일 타임에 그 값이 미리 계산이 되어서 알 수 있다. C++ 의 메타프로그래밍에는 반복문 구조가 없어 재귀적으로 템플릿을 구현해야한다는 것을 기억하자. 솔직히 처음부터 복잡한 코드를 보면 이게 코드가 맞나 싶을 정도로 어지러운 코드도 많은 것 같다. 간단한 예시부터 이해해보자. 피보나치 수열의 n번째 수 구하기 피보나치 수열은 다음과 같다. 1, 1, 2, 3, 5, 8, ... 그리고 그 공식은 arr[i] = arr[i-1] + arr[i-2] 이다. 위 수열에서 n번째 값은 구하기 위해서 여..
STL에서 반복자를 통해 각 원소(element)에 접근 할 수 있다. 이는 반복문에서 사용하기 편하다. 포인터 타입으로 생각하면 간단하다. STL의 모든 자료 구조는 내부 원소 순회를 위한 반복자를 제공한다. 각 템플릿마다 iterator 타입은 각각 따로 존재한다. vector::iterator vectorIntIt; vector::iterator vectorFloatIt; list::iterator listStringIt; unordered_map::iterator uMapIt; set::iterator longSetIt; 순회 방식에 따라 3가지로 나뉜다. 사용 가능 연산자 순방향 ++로 다음 반복자 이동 *, ++, ==, != 양방향 ++로 다음 반복자 이동 및 --로 이전 반복자 이동 *, ..
C#에서 Protobuf를 사용할 때는 간단하게 nuget 패키지에 있는 Google.Protobuf만 설치하면 되지만, C++은 직접 헤더 및 라이브러리들을 추가해주어야 한다. 만약 선택한 protobuf 프로젝트의 cmake 폴더 내에 CMakeLists.txt 파일이 있다면 아래 방법을 이용하는 방법도 있다. (보통 구버전에 해당한다.) https://minttea25.tistory.com/127 Protobuf 프로젝트에 추가하기 (Windows, CMake) C#에서 Protobuf를 사용할 때는 간단하게 nuget 패키지에 있는 Google.Protobuf만 설치하면 되지만, C++은 직접 헤더 및 라이브러리들을 추가해주어야 한다. (C#이 굉장히 편했던 것이었다!!!!!!!!!!!!!!!!!..
C#에서 Protobuf를 사용할 때는 간단하게 nuget 패키지에 있는 Google.Protobuf만 설치하면 되지만, C++은 직접 헤더 및 라이브러리들을 추가해주어야 한다. (C#이 굉장히 편했던 것이었다!!!!!!!!!!!!!!!!!!!) 먼저 짚고 넘어가야 할 것은 프로토버퍼 특정 버전 이후에 릴리즈 된 프로젝트는 단순히 cmake로 솔루션을 생성하고 빌드하려고 하면 에러가 날 것이다. 이 경우 다음글을 참고하자. ( https://minttea25.tistory.com/128 ) (그 이전 버전은 cmake 폴더에 있는 CMakeLists.txt파일을 포함하고 있어서 하는 방법이 다소 간단하다.) (일단 확인해 본 것은 3.19까지는 가능한 것 같다.) 추가적으로 proto파일에 대한 outp..
이 글은 `알고리즘 문제해결전략 - 구종만 (인사이트)의 내용을 일부 참고하여 작성하였습니다. 에라토스테네스의 체를 이용한 소수 찾기 기법은 2 부터 시작해 해당 값이 소수이면, 그 값의 배수를 숫자가 있는 풀(pool)에서 지워나가는 방법을 이용해 풀에 소수만 남기는 기법이다. 어떤 소수인 n에 대해서 n * i (i > 0)에 해당하는 값을 걸러내는 체를 이용한다. 위 방법에서 체에 대한 배열의 크기는 확인하려는 값의 최댓값이 될 것이다. 만약 1억까지의 수를 확인하려고 하면 boolean 타입의 배열을 써도 1억 바이트나 사용해야 한다는 것이다. 사실 0과 1만을 표현하는데 있어서 가장 좋은 데이터는 비트이다. 하지만 보통 프로그램 언어에서는 true/false를 표현하는데 사용되는 boolean ..
C++에서 상수를 정의하는 방법으로 2가지가 있다. 첫 번째로, define을 이용하여 매크로로 상수를 정의하는 방법이 있고, 두 번째로는 constexpr을 이용하여 상수를 정의하는 방법이 있다. #define PI 3.141592 constexpr double PI = 3.141592; 두 방법의 특징과 차이점을 보고 무엇을 사용하면 더 좋을지 확인해보자. define define은 전처리기(preprocessor) 지시자로, C++의 전처리기를 통해 상수를 정의하는 방법이다. 이는 매크로를 이용하는데, 매크로는 컴파일 전에 사용된 매크로값이 텍스트 치환을 통해 해당 정의 내용으로 그대로 바뀐다. (말 그대로 매크로 값에 정의했던 내용이 그대로 들어간다. 단순히 텍스트 치환 기능이다.) define의..
vector, deque, set, map, stack, queue, priority_queue 등의 컨테이너와 자료구조에서 자주 사용하는 함수들을 간단하게 요약하였다. 먼저, 간단하게 표현하기 위해서... 편의상 템플릿 타입과 컨테이너 사이즈 타입(size_t)은 int 형으로 하였다. 템플릿 타입 명시 를 생략하였다. const를 생략했고 각 컨테이너의 iterator는 간단하게 iterator로만 표현했다. 진짜 진짜 주요한 함수만 확인해보려면 스크롤을 맨 아래로 내리자! 참조: https://en.cppreference.com/w/cpp/container vector Sequence Container로 요소에 대해 순차적으로 접근 할 수 있다. (forward, backward 둘 다 순회 가능)..