본문 바로가기

분류 전체보기465

[C++] 템플릿(Template) 심화편 (1) References Professional C++ https://en.cppreference.com/w/ Contents More About Template Parameters Class Template Partial Specialization (부분 특수화) Function Partial Specialization with Overloading [C++] 템플릿 (Templates) 위 포스팅에서 클래스와 함수 템플릿을 어떻게 사용할 수 있는지에 대해서 살펴봤습니다. 표준 라이브러리의 내부 작동 방식을 파악하거나 간단한 클래스를 직접 정의할 수 있는 정도로만 템플릿을 사용하고자 한다면 이번 포스팅에 대한 내용은 모르더라도 괜찮을 것입니다. 만약 템플릿의 세부사항과 한계들을 알고 싶다면 이번 포스팅의 내.. 2022. 3. 1.
[C++] 난수(random number) - random 라이브러리 References Professional C++ https://en.cppreference.com/w/ Contents C-스타일 난수 생성 Random Number Engines Random Number Engine Adapters Predefined Engines and Engine Adapters 난수 생성 예제 C++의 난수 생성 라이브러리는 다양한 알고리즘과 분포들을 사용하여 난수를 생성할 수 있습니다. 이 라이브러리는 헤더 파일에 정의되어 있으며, std 네임스페이스에 속합니다. 여기에는 크게 3개의 컴포넌트가 존재합니다: engines, engine adapters, distributions. 난수 엔진(engine)은 실제 난수를 생성하고 다음 난수를 생성하기 위한 상태를 저장합니다. 분.. 2022. 2. 28.
[C++] chrono 라이브러리 (Date, Time 유틸리티) References Professional C++ https://en.cppreference.com/w/ Contents Compile-Time rational numbers (컴파일 시간 유리수, ratio) Duration Clock Time Point 이번 포스팅에서는 C++ 표준 라이브러리에서 시간 관련 기능인 chrono 라이브러리에 대해서 알아보겠습니다. C++의 chrono 라이브러리는 time과 date를 다루는 클래스로 다음과 같은 요소들로 구성되어 있습니다. Durations Clocks Time points Dates (C++20) Time zones (C++20) 모두 에 정의되었으며 std::chrono 네임스페이스에 속합니다. 이번 포스팅에서는 chrono 라이브러리 중에서도 시.. 2022. 2. 27.
[C++] String Localization References Professional C++ https://en.cppreference.com/w/ Contents Wide Characters 스트링 리터럴 현지화 Locales and Facets C나 C++ 프로그래밍을 처음 배울 때 각 문자를 아스키(ASCII) 코드를 표현하는 바이트로 취급했습니다. 아스키 코드는 7바이트로 구성되었으며 주로 8비트의 char 타입으로 표현합니다. 하지만 유명한 프로그램들은 전 세계적으로 사용됩니다. 따라서 프로그램을 작성할 때는 당장 전 세계 사용자를 대상으로 삼지는 않더라도 나중에 Localization(현지화)를 지원하거나 다양항 로케일(locale)을 인식하게 만들 수 있도록 디자인하는 것이 좋습니다. 1. Wide Characters 모든 언어가 한.. 2022. 2. 27.
[C++] 알고리즘 (Algorithms) (3) References Professional C++ https://en.cppreference.com/w/ Contents 연산 알고리즘 (Operational Algorithms) : for_each, for_each_n 분할 알고리즘 (Partition Algorithms) : partition_copy, partition 정렬 알고리즘 (Sorting Algorithms) : sort, stable_sort, is_sorted, is_sorted_until, nth_element 이진 탐색 알고리즘 (Binary Search Algorithms) : binary_search, lower_bound, upper_bound, equal_range 집합 알고리즘 (Set Algorithms) : inclu.. 2022. 2. 26.
[C++] 알고리즘 (Algorithms) (2) References Professional C++ https://en.cppreference.com/w/ Contents 불변형 순차 알고리즘 (non-modifying sequence algorithm) 탐색 알고리즘 (default_searcher, boyer_moore_searcher, boyer_moore_horspool_searcher) 비교 알고리즘 카운팅 알고리즘 가변형 순차 알고리즘 (modifying sequence algorithm) transform, transform copy, copy_backward, copy_if, copy_n move, move_backward replace, replace_if remove, remove_if, erase(C++20), erase_if(C++.. 2022. 2. 26.
[C++] 알고리즘 (Algorithms) (1) References Professional C++ https://en.cppreference.com/w/ Contents C++ Algorithms find(), find_if(), accumulate() 알고리즘과 이동 의미론 알고리즘 콜백 복사 문제 표준 라이브러리에서는 여러 가지 유용한 제너릭 데이터 구조(컨테이너)를 제공합니다. 다른 라이브러리와는 달리 표준 라이브러리는 여기서 더 나아가 거의 모든 컨테이너에 적용할 수 있는 제너릭 알고리즘을 다양하게 제공합니다. 이러한 알고리즘을 활용하면 컨테이너에 담긴 원소를 검색하고, 정렬하고, 가공하고, 다양한 연산을 수행할 수 있습니다. 표준 라이브러리 알고리즘의 가장 큰 장점은 각 원소의 타입이나 컨테이너의 타입과는 독립적이라는 점입니다. 게다가 모든 .. 2022. 2. 26.
[C++] 템플릿 (Templates) References Professional C++ https://en.cppreference.com/w/ Contents 클래스 템플릿 (Class Template) 템플릿 특수화 (Template Specialization) 상속 vs 특수화 비교 함수 템플릿 변수 템플릿 C++은 언어 차원에서 객체지향 프로그래밍뿐만 아니라 제너릭 프로그래밍(generic programming)도 지원합니다. 제너릭 프로그래밍의 목적은 코드를 재사용할 수 있게 작성하는 것입니다. C++에서 제너릭 프로그래밍을 위해 제공하는 핵심 도구는 템플릿입니다. 엄밀히 말하면 템플릿은 객체지향 기법에 속하지는 않지만 객체지향 프로그래밍에서 함께 적용하면 강력한 효과를 발휘합니다. 이번 포스팅부터 템플릿에 대한 기본적인 내용들에 대.. 2022. 2. 24.
[C/C++] 가변 인자 리스트 References Professional C++ https://en.cppreference.com/w/ Contents 가변 인자 리스트 (variable-length argument list) Variable-Length Argument Lists 기존 C 언어의 기능인 가변 인자 리스트(variable-length argument list)를 살펴보겠습니다. 간혹 레거시 코드에서 사용하기도 하는데, 새로 C++로 작성한다면 가변 인자 템플릿(variadic template)을 사용하는 것이 좋습니다. 에서 제공하는 C 함수인 printf()를 먼저 살펴보겠습니다. 이 함수를 호출할 때 전달할 수 있는 인자는 다음과 같이 다양합니다. printf("int %d\n", 5); printf("String.. 2022. 2. 23.
[C++] Lambda Expression (람다 표현식) References Professional C++ https://en.cppreference.com/w/ Contents Lambda Expression 람다 표현식(Lambda expression)이란 함수나 함수 객체를 별도로 정의하지 않고 필요한 지점에서 곧바로 함수를 직접 만들어 사용할 수 있는 일종의 익명 함수(anonymous function)입니다. 람다 표현식을 사용하면 익명 함수를 인라인으로 작성할 수 있습니다. 문법은 매우 쉽고, 코드를 깔끔하게 만들 수 있으며, 읽기도 쉬워집니다. 특히 다른 함수에 전달되는 짧은 콜백 함수를 인라인으로 작성할 때 유용합니다. 1. 문법 먼저 람다 표현식의 문법을 살펴보겠습니다. 다음 예제는 콘솔에 문자열을 출력하는 람다 표현식을 정의하고 있습니다. 람.. 2022. 2. 23.