Binary Search Tree(이진 검색 트리)는 널리 사용되는 형태의 이진 트리이다. 부모 노드와 자식 노드 간의 관계는 아래와 같다. 왼쪽 노드 left) current = current->left; /* 가장 작은 노드 반환 */ return current; } private: /* 원소 검색/삽입은 재귀적으로 동작하기 때문에 실제 구현을 impl에서 하고, private으로 지정하여 외부에서 직접 호출을 막는다. */ node* find_impl(node* current, int value) { if(!current) { cout data == value) { cout right) current->right = new node{value, NULL, NULL}; else insert_impl(..
이진 트리는 각 노드가 최대 두 개의 자식 노드(왼쪽과 오른쪽)를 가질 수 있는 계층적 자료 구조이다. 이 구조에서 모든 노드는 데이터를 저장하며, 주로 탐색, 정렬 작업에 효율적이다. 이진 트리는 다양한 형태(예: 이진 탐색 트리, AVL 트리)로 존재한다. 우선 가장 기본적인 형태의 이진 트리로 아래와 같은 조직도를 구현하려고 한다. 코드와 함께 살펴보자. #include #include #include using namespace std; struct node { string position; // 각 노드는 'position'이라는 문자열을 가지며, 직책을 나타낸다. node* first; // 'first' 포인터는 첫 번째 자식 노드를 가리킨다. node* second; // 'second' ..
deque deque (double-ended queue)는 양쪽 끝에서 요소를 추가하거나 제거할 수 있는 유연한 컨테이너이다. 이 컨테이너는 다양한 작업을 지원하며, 각각의 작업은 특정한 시간 복잡도를 가진다. push_front: deque의 시작 부분에 요소를 추가한다. 시간 복잡도는 일반적으로 상수 시간(O(1))이다. push_back: deque의 끝 부분에 요소를 추가한다. 이 작업 역시 상수 시간(O(1))이 소요된다. pop_back: deque의 끝 부분에서 요소를 제거한다. 상수 시간(O(1))이 걸린다. pop_front: deque의 시작 부분에서 요소를 제거한다. 이 작업도 상수 시간(O(1))이 소요된다. erase: deque 내의 특정 위치에 있는 요소를 제거한다. 시간 복..
std::forward_list는 C++ 표준 라이브러리의 일부로, 단방향 연결 리스트를 구현하고 있다. 각 원소는 다음 원소를 가리키는 포인터를 포함하며, 이 구조는 원소의 삽입과 삭제를 유연하게 만든다. 초기화 및 원소 셋팅 #include #include int main() { std::forward_list flist; // 빈 forward_list 생성 // 원소 삽입 flist.push_front(1); flist.push_front(2); flist.push_front(3); // 출력 for (int n : flist) { std::cout
std::array 자주 사용되는 자료 구조이지만, 주요 단점이 몇 가지 존재한다. 배열의 크기는 컴파일 시간에 결정되는 상수이다. 즉, 프로그램 실행 중에 변경할 수 없다. 크기가 고정되어 있어서 원소를 추가하거나 삭제할 수 없다. std::array의 메모리 할당 방법을 변경할 수 없다. 항상 스택 메모리를 사용한다. std::vector - 가변 크기 배열 vector는 C 스타일 배열 또는 std::array가 가지고 있는 가장 두드러지는 문제 중 하나인 '고정 크기' 문제를 해결한다. std::vector는 초기화 과정에 데이터의 크기를 제공하지 않아도 된다. 다음은 벡터를 초기화하는 몇 가지 방법이다. // 크기가 0인 벡터 선언 std::vector vec; // 지정한 초깃값으로 이뤄진 크..
후행 반환 타입(trailing return type)은 C++11에서 도입된 기능으로, 함수의 반환 타입을 함수 매개변수 목록 뒤에 명시하는 방법이다. 이는 함수 선언 시 반환 타입을 더 명확하게 표현하거나, 특히 템플릿 함수에서 반환 타입을 표현하기 어려운 경우에 유용하다. 구문 후행 반환 타입은 auto 키워드와 화살표 (->)를 사용하여 정의된다. 기본 형식은 다음과 같다: auto functionName(parameters) -> returnType; 여기서 functionName은 함수의 이름, parameters는 매개변수 목록, returnType은 반환 타입이다. 사용 예 후행 반환 타입은 특히 반환 타입이 매개변수에 의존하는 경우 유용하다. 예를 들어, 두 매개변수의 타입이 다를 때 그..
이번에 연습할 문제는 다양한 타입의 데이터 여러 개를 인자로 받아 공통 타입으로 변환하는 함수를 만들어 보는 예제이다. 이 함수가 반환하는 컨테이너는 모든 인자를 공통 타입으로 변환하여 저장하며, 전체 원소를 빠르게 순회할 수 있어야 한다. #include #include #include using namespace std; template auto build_array(Args&&... args) -> array { using commonType = typename common_type::type; return {forward((Args&&)args)...}; }; int main() { auto data = build_array(1, 0u, 'a', 3.2f, false); for(auto i : d..
:: (범위 지정 연산자) - 기능: `::` 연산자는 클래스, 네임스페이스, 열거형 등의 특정 범위 내에서 멤버에 접근하는 데 사용되는 연산자이다. 이는 클래스의 정적 멤버, 네임스페이스의 멤버, 열거형의 멤버 등에 접근할 때 필요하다. - 사용 예시: `MyClass::myStaticMethod`라는 표현은 `MyClass`라는 클래스 내에 정의된 정적 메서드 `myStaticMethod`에 접근하는 것이다. 이와 유사하게, `::` 연산자는 전역 네임스페이스에 있는 함수나 변수에 접근할 때도 사용된다. 예를 들어, 전역 변수 `globalVar`에 접근하기 위해서는 `::globalVar`로 표현할 수 있다. - 특징: 이 연산자는 객체의 인스턴스가 아닌, 클래스 자체나 네임스페이스 같은 더 큰 범..
범용 참조는 주로 템플릿 함수에서 lvalue와 rvalue 참조를 모두 처리할 수 있는 유연성을 제공하기 위해 사용된다. 여기서 `Args&&`는 다음과 같은 특징을 가진다: 1. 타입 추론: `Args&&`는 컴파일러가 인자의 타입을 추론하도록 한다. 인자가 lvalue인지 rvalue인지에 따라 `Args`의 타입이 결정된다. 2. lvalue와 rvalue 처리: `Args&&`는 lvalue 참조와 rvalue 참조 모두를 처리할 수 있다. 이는 함수가 lvalue 참조 (예: 변수) 및 rvalue 참조 (예: 임시 객체)를 모두 효율적으로 처리할 수 있도록 해준다. 3. 완벽한 전달 (Perfect Forwarding): `Args&&`와 함께 `std::forward`를 사용하면 함수에 전..
가변 템플릿 인자는 템플릿 함수나 클래스가 임의의 수와 타입의 인자를 받을 수 있도록 한다. 여기서 `Args`는 가변 인자의 타입들을 나타내는 플레이스홀더 이름이며, 다른 이름으로 대체될 수 있다. 가변 템플릿 인자를 사용하는 방법은 다음과 같다: template void myFunction(Args ... args) { // args를 사용하는 코드 } 이 함수는 어떤 수와 타입의 인자든 받을 수 있다. 예를 들어, `myFunction(1, 2.5, "Hello")`와 같이 호출할 수 있다. template class MyClass { public: MyClass(Args ... args) { // args를 사용하는 생성자의 로직 } }; 이 클래스도 여러 타입과 수의 인자를 받을 수 있는 생성자..
- react
- 파니노구스토
- javascript
- AsyncStorage
- 정보보안기사 #실기 #정리
- 인천 구월동 이탈리안 맛집
- 이탈리안 레스토랑
- Async
- Promise
- 인천 구월동 맛집
- await
- redux
- react-native
- 맛집
- redux-thunk
- Total
- Today
- Yesterday