프로그래밍/C & C++92 [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. [C++] Function Object (함수 객체) References Professional C++ https://en.cppreference.com/w/ Contents Function Object (Functor) 어떤 클래스의 함수 호출 연산자(function call operator)를 오버로딩해서 그 클래스의 객체를 함수 포인터처럼 사용하게 만들 수 있습니다. 이렇게 사용하는 객체를 함수 객체(function objects) 또는 펑터(functor)라고 부릅니다. 단순한 함수 대신 함수 객체를 사용하면 여러 호출들 간에 상태를 유지할 수 있다는 장점이 있습니다. 어떤 클래스 함수 객체를 만들기 위해서, 단지 함수 호출 연산자를 오버로딩하면 됩니다. 아래의 간단한 함수 객체 예제가 있습니다. class IsLargerThan { public: .. 2022. 2. 22. [C++] Function Pointer (함수 포인터) References Professional C++ https://en.cppreference.com/w/ Contents Function Pointer (함수 포인터) Pointers to Methods (or Data Members) C++의 함수는 다른 함수에 인수로 전달하거나, 다른 함수로부터 리턴되거나 변수에 할당하는 등 일반 변수와 같은 방식으로 사용될 수 있기 때문에 first-class function(일급 함수)라고 불립니다. 이런 문맥에서 자주 등장하는 용어는 호출할 수 있는 것이라고 표현되는 콜백(callback) 입니다. 여기서 콜백이란 함수 포인터(function pointer)나 함수 포인터와 슈사한 역할을 하는 것들을 말하는데, 예를 들면 operator()를 오버로딩한 객체와 .. 2022. 2. 22. [C++] Iterator (이터레이터, 반복자) References Professional C++ Contents Iterator, Iterator Traits Stream Iterator Iterator Adaptor Reverse Iterator Move Iterator 1. Iterator 표준 라이브러리는 컨테이너의 원소에 접근하는 기능을 범용적으로 제공하기 위해 반복자(이터레이러, iterator) 패턴을 사용합니다. 컨테이너마다 원소에 대해 반복문을 수행할 방법이 담긴 특수한 스마트 포인터인 반복자가 정의되어 있습니다. 컨테이너의 종류가 달라도 반복자의 인페이스는 모두 C++ 표준을 따르므로 모두 같습니다. 그래서 구체적인 동작은 달라도 컨테이너 원소에 대해 반복문을 비슷한 방식으로 작성할 수 있도록 인터페이스는 통일되어 있습니다. 반복자는.. 2022. 2. 21. [C++] 연산자 오버로딩 (2) References Professional C++ Contents 함수 호출 연산자 오버로딩 역참조 연산자 오버로딩 변환 연산자 메모리 할당/해제 연산자 오버로딩 사용자 정의 리터럴 연산자 오버로딩 [C++] 연산자 오버로딩 (1) 지난 포스팅에 이어 연산자 오버로딩에 대해서 계속 알아보도록 하겠습니다. 6. 함수 호출 연산자 오버로딩 함수 호출 연산자 operator()도 오버로딩할 수 있습니다. 클래스를 정의할 때 operator()를 추가하면 이 클래스의 객체를 함수 포인터처럼 사용할 수 있습니다. 함수 호출 연산자를 제공하는 클래스의 객체를 함수 객체(function object, or functor)라고 합니다. 이 연산자는 non-static 메소드로 오버로딩해야 합니다. 아래 코드를 통해 o.. 2022. 2. 20. [C++] 연산자 오버로딩 (1) References Professional C++ Contents 연산자 오버로딩 (Operator Overloading) 산술 연산자 오버로딩 비트 연산자 / 논리 연산자 오버로딩 스트림 입출력 연산자 오버로딩 인덱스 연산자 오버로딩 C++에서는 +,-,= 과 같은 연산자의 의미를 클래스에서 새롭게 정의할 수 있습니다. 연산자 오버로딩을 활용하면 클래스를 int나 double 같은 기본 타입으로 취급할 수 있습니다. 심지어 클래스를 배열이나 함수, 포인터처럼 만들 수도 있습니다. 아마 오버로딩에 관해서는 잘 알고 있을거라고 생각하지만, 놓치는 부분들이 있을 수도 있는 연산자 오버로딩에 대해 세부사항들을 소개해보도록 하겠습니다. 1. 연산자 오버로딩 개요 C++은 +, myCell >> anotherCe.. 2022. 2. 20. [C++] I/O 스트림 References Professional C++ https://en.cppreference.com/w/ Contents C++ I/O 기능 스트림 (Stream) 문자열 스트림 (String Stream) 파일 스트림 (File Stream) 양방향 I/O (Bidirectional I/O) 프로그램의 주된 기능은 입력(input)을 받아서 결과물(output)을 생성하는 것입니다. 어떠한 output도 생성하지 않는 프로그램은 그다지 쓸모가 없습니다. 프로그래밍 언어마다 나름대로의 I/O 메커니즘을 제공하는데, 언어의 기본 기능에 포함되어 있기도 하고, OS에 특화된 API로 제공되기도 합니다. I/O 시스템은 유연하고 사용하기 쉬울수록 좋습니다. I/O 시스템이 유연하다는 것은 파일이나 콘솔을 비롯.. 2022. 2. 19. 이전 1 ··· 3 4 5 6 7 8 9 10 다음