본문 바로가기

C++

(10)
C++ 템플릿 1. 템플릿사용자가 원하는 타입을 지정하면 해당 타입의 형태의 물건이 나옵니다.데이터 형식이나 함수의 일반적인 모양을 정의하는데 사용하는데 템플릿은 코드 재사용성을 증가시킵니다.일반적으로 컴파일 타임에 타입 안정성을 보장합니다. ⇒ 컴파일 타임에 수행됩니다. 2. 함수 템플릿#include #include template T max(T& a, T& b) { return a > b ? a : b;}int main() { int a = 1, b = 2; std::cout 템플릿 함수도 마찬가지로 함수의 일반적인 버전을 제공하며, 호출 시 컴파일러가 타입을 결정합니다. 함수의 일반화된 선언을 의미합니다.  예시 Swaptemplate void Swap(T& a, T& b){ T temp; temp = a..
C++ 동적 할당 1. 동적 할당필요성동적 할당은 프로그램 실행 중 메모리를 동적으로 할당하고 해제하는 데 사용됩니다. 정적 할당(예시 : 배열)은 컴파일 시점에 크기를 결정하고, 프로그램이 실행되는 동안 크기를 변경하기 어렵습니다.유연한 크기의 자료구조 필요성프로그램 실행 중에 데이터 크기가 동적으로 변할 때, 동적 할당은 필수적입니다.자원 효율성정확한 메모리 양을 미리 예측하기 어려운 경우, 동적 할당은 자원을 효율적으로 사용할 수 있게 해줍니다. 메모리 영역동적 할당의 경우 메모리 영역에서 Heap 영역에 할당됩니다.프로그램 실행 중 (Runtime) 메모리를 동적으로 할당하고 해제하는데 사용되는 영역입니다. 종류C++에서 동적 할당은 new 와 delete 키워드를 사용하는 방식, 스마트 포인터를 사용하는 방식으로..
C++ 자료구조 구현 이중 원형 연결 리스트 구현에 앞서서..리스트 연결 최소 단위는 Node입니다.연결 리스트의 마지막 노드가 가장 첫 번째 head 노드를 가리켜야 합니다.조회, 삽입, 삭제 과정이 존재합니다. Node 구현template class Node{ // 1. Node는 prev, data, next 로 이루어져 있습니다.public: Node(Node* prev, T data, Node* next) : prev(prev) , data(data) , next(next) { } Node(T data) : prev(nullptr) , data(data) , next(nullptr) { } Node() : prev(nullptr) , data(0) , next(nullptr) { }public: Node* prev; int..
C++ 자료구조 구현 Red-Black Tree ColorRedBlackRed는 동시에 2개가 나올 수 없다.  NODE_TYPEPARENT : 부모 노드LCHILD : 왼쪽 자식 노드RCHILD : 오른쪽 자식 노드  RBPair트리에 들어갈 자료형int key, int value 타입  Node트리에 들어갈 노드#pragma once#include/*1. 모든 노드는 빨간색 혹은 검은색이다.2. 루트 노드는 검은색이다.3. 모든 리프 노드(NIL)들은 검은색이다. (NIL : null leaf, 자료를 갖지 않고 트리의 끝을 나타내는 노드)4. 빨간색 노드의 자식은 검은색이다.   == No Double Red(빨간색 노드가 연속으로 나올 수 없다)5. 모든 리프 노드에서 Black Depth는 같다.   == 리프노드에서 루트 노드까지 가는 경로..
C++ 클래스 목차1. 클래스의 선언과 정의2. 클래스의 접근 지정자3. 생성자와 소멸자 4. this 포인터 1. 클래스의 선언과 정의 클래스의 선언class MyClass {public: // 멤버 변수 (속성) int myVariable; // 멤버 함수 (메서드) void myFunction();};다음은 클래스 선언에 대한 예시입니다.클래스에는 멤버 변수와, 멤버 함수를 선언할 수 있습니다. 클래스의 정의void MyClass::myFunction() { // 멤버 함수의 구현 // myVariable을 사용할 수 있음 // 다른 작업 수행}다음은 클래스 정의에 대한 예시입니다.멤버 함수의 구현부에 대해서 정의를 수행할 수 있습니다.  2. 클래스의 접근 지정자클래스의 접..
C++ 동적할당 목차1. 동적 할당 2. 가변 배열3. 문제 풀이 1. 동적 할당 필요성동적 할당은 프로그램 실행 중 메모리를 동적으로 할당하고 해제하는데 사용됩니다.정적 할당은 컴파일 시점에 크기를 결정하고, 프로그램이 실행되는 동안 크기를 변경하기 어렵습니다.동적 할당은 다음과 같은 이유로 인해 사용됩니다. 유연한 크기의 자료구조 필요성프로그램 실행 중에 데이터 크기가 동적으로 변할 때 동적 할당은 필수적입니다.자원 효율정확한 메모리 양을 미리 예측하기 어려운 경우, 동적 할당은 자원을 효율적으로 사용할 수 있게 해줍니다.메모리 영역동적 할당의 경우 메모리 영역에서 Heap 영역에 할당됩니다.프로그램 실행 중 메모리를 동적으로 할당하고 해제하는데 사용되는 영역입니다. 종류C++에서 동적 할당은 new와 delete ..
C++ 컴파일 과정 목차 1. 컴파일 과정 2. 링킹 과정 3. 참고 알고 가면 좋을 것들. 라이브러리란? 프로그램이 동작하기 위해 필요한 외부 목적 코드들 링킹이란? 각각의 TU(해석 유닛)들에서 생성된 목적 코드들을 하나씩 모아서 하나의 실행 파일을 만드는 작업 정적 링킹과 동적 링킹 정적 링킹 : 정적 라이브러리를 링킹하는 방식 동적 링킹 : 동적 라이브러리를 링킹하는 방식 컴파일 과정 전처리 과정이 종료되고 컴파일 과정이 수행됩니다. 해석 유닛 생성 이 단계에서 컴파일이 이루어집니다. 전처리기 토큰들이 컴파일 토큰으로 변환 되고, 컴파일 토큰들은 컴파일러에 의해 해석되어서 해석 유닛(TU)을 생성합니다. 예시; // TU 1 int func(); // 선언 int func() { // 정의 return 1; } 해석..
C++ Const 정확도(Const Correctness) 목차 1. Const 정확도가 중요한 이유 2. 참조와 포인터에서의 사용 3. 멤버 함수에서의 사용 1. Const 정확도가 중요한 이유 The benefit of const correctness is that it prevents you from inadvertently modifying something you didn’t expect would be modified. const 정확도가 왜 중요할까요? const 정확도의 효과는 의도치 않게 수정하고 싶지 않았던 것에 대해서 수정하는 것을 방지한다는 것입니다. 조금 더 깊게 들어가면 더 다양한 이유가 있겠지만 위의 문장이 const 정확도의 중요성에 있어서 많은 부분을 요약해준다고 생각합니다. 2. 참조와 포인터에서의 사용 const T* p po..
C++ 연산자 목차1. 연산자 우선순위2. 산술 연산자3. 증감 연산자4. 논리 연산자5. 대입 연산자6. 비트 연산자7. 삼항 연산자8. 문제 풀이 1. 연산자 우선순위각 연산자는 우선순위 동등한 우선순위 내에서는 왼항부터 우선순위를 갖는 경우가 있고, 오른항부터 우선순위를 갖는 경우가 있습니다. 2. 산술 연산자 단항 산술 연산자피 연산자가 한개인 산술 연산자를 단항 산술 연산자라고 합니다.+, - 가 존재합니다. 이항 산술 연산자피 연산자가 두개인 산술 연산자를 이항 산술 연산자라고 합니다.+ : 왼항과 오른항을 더합니다.- : 왼항에서 오른항을 뻅니다.* : 왼항에서 오른항을 곱합니다./ : 왼항에서 오른항을 나눕니다.% : 왼항에서 오른항을 나눈값의 나머지를 구합니다.정수와 부동 소수점 숫자의 나눗셈정수와 정..
C++ 자료형 목차1. 자료형의 표현2. 정수형 자료형3. 실수형 자료형4. 부동 소수점 IEEE-7545. 문제 풀어보기.1. 자료형의 표현Byte1 byte == 8bitbit는 데이터 처리에서 가장 작은 단위, 0 또는 1중 하나의 상태를 나타냅니다.1byte는 2^8만큼의 상태값을 표현 가능합니다.음수 표현컴퓨터는 가장 왼쪽에 존재하는 비트가 1인 경우 음수, 0인경우 양수로 인식합니다.가장 왼쪽에 존재하는 비트를 MSB(Most Significant Bit)로 부릅니다. 직역하면 가장 중요한 비트라는 뜻이고 음수 부호 비트를 나타냅니다.뺄셈의 계산컴퓨터는 뺄셈을 음수의 덧셈으로 표현합니다.예시를 들자면10 + (-10) = 0 이런식으로 뺄셈을 표현합니다.여기서 -10 을 가리키는 이진수에 대해서 예시를 들어..