728x90

오블완 20

[C++] const static data member

constexpr는 C++11에서 도입된 키워드로, 컴파일 타임에 상수를 계산할 수 있도록 합니다. 이를 통해 런타임 비용을 줄이고, 코드의 안정성과 최적화를 향상시킬 수 있습니다. 주요 특징컴파일 타임 계산constexpr 함수와 변수는 가능한 경우 컴파일 타임에 계산됩니다.런타임에서 호출될 수도 있지만, 계산 가능 여부는 입력 값에 따라 결정됩니다.상수 표현식constexpr 변수는 반드시 상수 표현식으로 초기화되어야 합니다.컴파일 타임에 상수로 사용될 수 있습니다.constexpr int a = 10; // 컴파일 타임 상수constexpr int b = a + 5; // 컴파일 타임에 15로 계산 함수의 제한 사항C++11: 함수 본문은 단일 return 문으로만 작성 가능.C++14: 조건문(i..

C++ 2024.11.27

[C++] front 함수

front 함수는 C++ STL(Standard Template Library)의 여러 컨테이너에서 제공하는 멤버 함수로, 컨테이너의 첫 번째 요소에 대한 참조를 반환합니다. 이를 사용하여 첫 번째 요소를 읽거나 수정할 수 있습니다. 사용 가능 컨테이너front 함수는 다음과 같은 STL 컨테이너에서 사용할 수 있습니다:시퀀스 컨테이너: std::vector, std::deque, std::list컨테이너 어댑터: std::queue (첫 번째 요소를 반환)사용 예시#include #include int main() { std::vector vec = {10, 20, 30}; // 첫 번째 요소 출력 std::cout 출력 결과첫 번째 요소: 10 수정된 첫 번째 요소: 100특징반환 ..

C++ 2024.11.26

[C++] 클래스 템플릿의 부분 특수화(partial specialization)와 명시적 특수화(explict specialization)

C++ 템플릿의 부분 특수화와 명시적 특수화는 템플릿을 특정 타입이나 조건에 맞게 커스터마이징하는 강력한 기능입니다. 이를 통해 일반적인 템플릿을 특정 조건에 따라 다르게 동작하도록 설계할 수 있습니다. 1. 명시적 특수화 (Explicit Specialization)명시적 특수화는 템플릿을 특정 타입에 대해 완전히 재정의하는 것입니다. 이는 특정 타입에 대해 일반 템플릿이 아닌 별도의 동작을 수행하도록 만듭니다.기본 구조template class MyClass { // 일반 템플릿 정의};// 특정 타입에 대한 명시적 특수화template class MyClass { // 특정 타입에 대한 특수화된 정의};예제: 명시적 특수화#include // 일반 템플릿template struct MyS..

C++ 2024.11.25

[C++] using키워드

C++에서 using은 **타입 별칭(type alias)**을 정의하거나 네임스페이스 내 이름을 더 간편하게 사용할 수 있도록 도와주는 키워드입니다. C++11부터 도입된 이 키워드는 코드의 가독성을 높이고 작성 시간을 단축시키는 데 매우 유용합니다. 1. 타입 별칭 정의using을 사용하면 기존 타입에 새로운 이름을 정의할 수 있습니다. 이는 기존의 typedef와 동일한 기능을 제공하지만, 문법적으로 더 직관적입니다.기본 문법using 새이름 = 기존타입;예제: 타입 별칭#include using Integer = int; // int를 Integer로 정의using IntVector = std::vector; // std::vector를 IntVector로 정의int ma..

C++ 2024.11.24

[C언어] void 포인터

C 언어에서 void 포인터는 데이터 타입이 정해지지 않은 포인터를 의미합니다. 이 포인터는 유연성과 확장성이 뛰어나지만, 잘못 사용하면 오류가 발생할 수 있어 주의가 필요합니다.1. void 포인터란?void 포인터는 **"타입이 없는 포인터"**입니다. 즉, 어떤 데이터 타입의 주소든 저장할 수 있는 일반 포인터입니다.그러나 역참조(dereference) 할 때는 적절한 타입으로 변환해야 합니다.예제#include int main() { int a = 10; float b = 5.5; void *ptr; // 어떤 데이터 타입이든 void 포인터에 저장 가능 ptr = &a; printf("Integer value: %d\n", *(int *)ptr); ptr..

C언어 2024.11.23

[C언어] 구조체와 공용체의 차이점 및 활용법

C 언어에서 구조체(struct)와 공용체(union)는 데이터를 묶어서 저장하는데 사용하는 중요한 자료형입니다. 이 두 개념은 비슷해 보이지만, 동작 원리와 메모리 사용 방식에서 큰 차이가 있습니다. 1. 구조체(struct)란?구조체는 여러 개의 데이터를 하나의 묶음으로 관리할 수 있는 사용자 정의 자료형입니다. 구조체의 각 멤버는 서로 독립된 메모리 공간을 가지며, 동시에 접근할 수 있습니다.특징각 멤버는 서로 다른 데이터 타입을 가질 수 있습니다.각 멤버는 고유한 메모리 공간을 차지합니다.총 메모리 크기는 모든 멤버의 크기의 합입니다.구조체 예제#include struct Student { int id; float grade; char name[20];};int main() { ..

C언어 2024.11.22

[C++] 클래스 템플릿(class template)

C++에서 **클래스 템플릿(class template)**은 여러 데이터 타입에 대해 동일한 클래스를 정의할 수 있게 해주는 기능입니다. 이를 통해 코드의 재사용성과 유연성을 높일 수 있으며, 다양한 데이터 타입에 대해 동일한 로직을 적용할 수 있습니다. 기본 개념클래스 템플릿은 template 키워드를 사용하여 정의되며, **타입 매개변수(type parameter)**를 사용해 클래스의 멤버 변수와 메서드의 타입을 동적으로 결정합니다.  기본 문법template class ClassName {public: T memberVariable; // 템플릿 타입을 사용하는 멤버 변수 ClassName(T value) : memberVariable(value) {} // 생성자 T getVa..

C++ 2024.11.21

[C++] decltype(타입 결정자)

C++11에서 도입된 **decltype**은 주어진 표현식의 타입을 결정하는 데 사용되는 키워드입니다. 이 기능은 특히 템플릿 프로그래밍이나 복잡한 타입 조작에서 매우 유용하며, 컴파일러가 타입을 자동으로 추론할 수 있게 해줍니다. 기본 문법decltype(expression) variable_name; expression: 타입을 추론할 수 있는 표현식.variable_name: 추론된 타입을 가진 변수의 이름.사용 예제1. 기본 사용법#include int main() { int a = 5; decltype(a) b = 10; // 'a'의 타입(int)을 사용하여 'b' 선언 std::cout   2. 표현식의 타입 결정#include int add(int x, int y) { ..

C++ 2024.11.20

[C++] 함수 템플릿(function template)

C++에서 **함수 템플릿(Function Template)**은 여러 데이터 타입에 대해 동일한 함수를 정의할 수 있는 강력한 기능입니다. 이를 통해 코드의 재사용성을 높이고, 다양한 타입에 대해 일관된 로직을 적용할 수 있습니다. 기본 개념함수 템플릿은 함수의 매개변수 타입을 일반화하여, 호출 시 전달되는 인자의 타입에 따라 적합한 함수 버전을 자동으로 생성합니다. 이를 위해 template 키워드와 타입 매개변수를 사용합니다.  기본 문법template T functionName(T arg) { // 함수 본체} T: 템플릿 매개변수(Type Parameter). 호출 시 실제 타입으로 대체됩니다.typename: 템플릿에서 타입 매개변수를 선언할 때 사용하는 키워드로, class와 동일하게 ..

C++ 2024.11.19

[C++] merge 함수

C++에서 std::merge 함수는 두 개의 정렬된 데이터를 하나로 병합하여 새로운 정렬된 범위를 생성하는 데 사용됩니다. 이는 정렬된 배열이나 컨테이너를 결합하거나 병합 정렬 알고리즘에서 핵심적으로 활용됩니다. 1. std::merge 함수란?동작 원리std::merge는 두 개의 정렬된 범위를 입력으로 받아 하나의 정렬된 범위로 병합합니다. 이때, 입력 범위가 반드시 오름차순 또는 내림차순으로 정렬되어 있어야 하며, 결과는 새로운 컨테이너나 범위에 저장됩니다.사용 프로토타입#include templateOutputIterator merge(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, In..

C++ 2024.11.18
728x90