분류 전체보기
-
explicit explicit 키워드는 주로 생성자와 변환 연산자에 사용되며, 해당 생성자나 변환 연산자가 암시적 변환(implicit conversion)을 허용하지 않도록 지정한다. 예를 들어, explicit 키워드가 없는 생성자를 가진 클래스가 있을 때: class Test { public: Test(int x) {} }; void func(Test t) {} int main() { func(42); // int에서 Test로 암시적 변환 가능 } 위의 코드는 func(42)에서 int 타입의 42가 Test 타입으로 암시적 변환되어 func 함수에 전달된다. explicit 키워드가 생성자에 지정된 경우: class Test { public: explicit Test(int x) {} }; v..
explicit 키워드explicit explicit 키워드는 주로 생성자와 변환 연산자에 사용되며, 해당 생성자나 변환 연산자가 암시적 변환(implicit conversion)을 허용하지 않도록 지정한다. 예를 들어, explicit 키워드가 없는 생성자를 가진 클래스가 있을 때: class Test { public: Test(int x) {} }; void func(Test t) {} int main() { func(42); // int에서 Test로 암시적 변환 가능 } 위의 코드는 func(42)에서 int 타입의 42가 Test 타입으로 암시적 변환되어 func 함수에 전달된다. explicit 키워드가 생성자에 지정된 경우: class Test { public: explicit Test(int x) {} }; v..
2023.11.01 -
중괄호 초기화 (Brace Initialization): C++11부터 소개된 중괄호 초기화는 객체의 초기화 방법을 통일하고자 도입되었다. 이 방식의 장점: 일관된 문법: 동일한 중괄호 {} 문법을 사용하여 변수, 객체, 배열, STL 컨테이너 등을 초기화할 수 있다. narrowing conversion 방지: {}를 사용하여 초기화할 때 형 변환이 수행되지 않거나 값의 손실이 발생하지 않도록 한다. int i{3.14}; // 컴파일 오류. narrowing conversion 방지 기본 생성자와 동일한 문법: 중괄호를 사용하여 기본 생성자를 호출하는 것도 가능하다. std::vector vec{}; // 비어 있는 벡터 생성 다양한 초기화 방법들 C++에서는 여러 가지 방법으로 변수나 객체를 초기화..
중괄호 초기화와 다양한 초기화 방법중괄호 초기화 (Brace Initialization): C++11부터 소개된 중괄호 초기화는 객체의 초기화 방법을 통일하고자 도입되었다. 이 방식의 장점: 일관된 문법: 동일한 중괄호 {} 문법을 사용하여 변수, 객체, 배열, STL 컨테이너 등을 초기화할 수 있다. narrowing conversion 방지: {}를 사용하여 초기화할 때 형 변환이 수행되지 않거나 값의 손실이 발생하지 않도록 한다. int i{3.14}; // 컴파일 오류. narrowing conversion 방지 기본 생성자와 동일한 문법: 중괄호를 사용하여 기본 생성자를 호출하는 것도 가능하다. std::vector vec{}; // 비어 있는 벡터 생성 다양한 초기화 방법들 C++에서는 여러 가지 방법으로 변수나 객체를 초기화..
2023.11.01 -
출처: 포큐아카데미 (알고리듬 및 자료구조 수업의 목차) 이론적으로는 전부 다 알아두고, 코드 구현은 적어도 그래프 이전까지는 할 줄 알아야 한다. 점근 표기법과 빅오 표기법 기초 자료 구조와 시간 복잡도 재귀함수 주먹구구식(brute-force) 알고리듬 P vs NP 문제 이진 탐색 버블 정렬 선택 정렬 삽입 정렬 퀵 정렬 병합 정렬 힙 정렬 비암호학적 해시 함수 체크섬과 CRC 암호학적 해시 함수 대칭 키 암호화 비대칭 키 암호화 트리 순회 이진 탐색 트리 레드-블랙 트리 트라이(Trie) 공간분할 트리 깊이 우선 탐색(DFS) 너비 우선 탐색(BFS) 미니맥스 알고리듬 동적 계획법(Dynamic Programming) 메모이제이션(memoization) 타뷸레이션(tabulation) 배낭 문제 ..
알아야 할 알고리즘/자료구조 키워드 정리출처: 포큐아카데미 (알고리듬 및 자료구조 수업의 목차) 이론적으로는 전부 다 알아두고, 코드 구현은 적어도 그래프 이전까지는 할 줄 알아야 한다. 점근 표기법과 빅오 표기법 기초 자료 구조와 시간 복잡도 재귀함수 주먹구구식(brute-force) 알고리듬 P vs NP 문제 이진 탐색 버블 정렬 선택 정렬 삽입 정렬 퀵 정렬 병합 정렬 힙 정렬 비암호학적 해시 함수 체크섬과 CRC 암호학적 해시 함수 대칭 키 암호화 비대칭 키 암호화 트리 순회 이진 탐색 트리 레드-블랙 트리 트라이(Trie) 공간분할 트리 깊이 우선 탐색(DFS) 너비 우선 탐색(BFS) 미니맥스 알고리듬 동적 계획법(Dynamic Programming) 메모이제이션(memoization) 타뷸레이션(tabulation) 배낭 문제 ..
2023.10.31 -
log(n)의 시간 복잡도.(단계별로 n개에서 반씩 줄여가면서 하니까) int BinarySearch(int* arr, int n, int x) // 이진 탐색 { int left = 0; int right = n - 1; while (left
이진 탐색 (Binary Search)log(n)의 시간 복잡도.(단계별로 n개에서 반씩 줄여가면서 하니까) int BinarySearch(int* arr, int n, int x) // 이진 탐색 { int left = 0; int right = n - 1; while (left
2023.10.31 -
lvalue와 rvalue, 그리고 move에 대한 개념은 C++에서 객체와 리소스 관리를 이해하는데 중요하다. 이들 각각의 개념을 메모리 관점에서 살펴보자 lvalue (Left Value) lvalue는 메모리에 지속적으로 위치한 객체를 나타낸다. lvalue는 변수 이름과 같이, 메모리 주소를 가지고 있어 해당 주소에 접근하거나 값을 변경할 수 있다. 예를 들어, int x = 10;에서 x는 lvalue다. rvalue (Right Value) rvalue는 일반적으로 임시 객체나 값으로, 메모리에 지속적인 위치를 가지지 않는다. rvalue는 일반적으로 표현식의 결과나 리터럴 값 등으로 생성되며, 그 수명은 매우 짧다. 예를 들어, 5, x + y, std::move(x) 등은 rvalue이다...
lvalue, rvalue, move 그리고 RVOlvalue와 rvalue, 그리고 move에 대한 개념은 C++에서 객체와 리소스 관리를 이해하는데 중요하다. 이들 각각의 개념을 메모리 관점에서 살펴보자 lvalue (Left Value) lvalue는 메모리에 지속적으로 위치한 객체를 나타낸다. lvalue는 변수 이름과 같이, 메모리 주소를 가지고 있어 해당 주소에 접근하거나 값을 변경할 수 있다. 예를 들어, int x = 10;에서 x는 lvalue다. rvalue (Right Value) rvalue는 일반적으로 임시 객체나 값으로, 메모리에 지속적인 위치를 가지지 않는다. rvalue는 일반적으로 표현식의 결과나 리터럴 값 등으로 생성되며, 그 수명은 매우 짧다. 예를 들어, 5, x + y, std::move(x) 등은 rvalue이다...
2023.10.31 -
다형성과 동적 바인딩 런타임에 적절한 함수를 호출하는 데는 가상 테이블(vtable)과 가상 포인터(vptr)라는 메커니즘이 사용된다. 이러한 메커니즘은 다형성을 구현하고 런타임에 객체의 실제 타입을 기반으로 올바른 함수를 호출할 수 있게 해준다. 아래에서 이 메커니즘이 어떻게 작동하는지 간략하게 설명 가상 테이블(vtable): 각 클래스에 대해 컴파일러는 가상 테이블을 생성. 가상 테이블은 클래스의 가상 함수에 대한 포인터를 저장하는 테이블이다. 각 가상 함수에 대해 하나의 항목이 있으며, 이 항목은 해당 함수의 주소를 저장한다. 가상 테이블(vtable): 각 클래스에 대해 컴파일러는 가상 테이블을 생성. 가상 테이블은 클래스의 가상 함수에 대한 포인터를 저장하는 테이블이다. 각 가상 함수에 대해 ..
다형성, virtual, override, virtual table, 동적 바인딩다형성과 동적 바인딩 런타임에 적절한 함수를 호출하는 데는 가상 테이블(vtable)과 가상 포인터(vptr)라는 메커니즘이 사용된다. 이러한 메커니즘은 다형성을 구현하고 런타임에 객체의 실제 타입을 기반으로 올바른 함수를 호출할 수 있게 해준다. 아래에서 이 메커니즘이 어떻게 작동하는지 간략하게 설명 가상 테이블(vtable): 각 클래스에 대해 컴파일러는 가상 테이블을 생성. 가상 테이블은 클래스의 가상 함수에 대한 포인터를 저장하는 테이블이다. 각 가상 함수에 대해 하나의 항목이 있으며, 이 항목은 해당 함수의 주소를 저장한다. 가상 테이블(vtable): 각 클래스에 대해 컴파일러는 가상 테이블을 생성. 가상 테이블은 클래스의 가상 함수에 대한 포인터를 저장하는 테이블이다. 각 가상 함수에 대해 ..
2023.10.31