반응형

공부/C++ 32

맵(map)과 unordered_map의 개념과 차이

1. 맵(map) 맵(map)은 각 키가 고유한 키-값 쌍의 모음을 저장하는 데이터 구조입니다. 연관 배열, 사전 또는 해시 맵이라고도 합니다. 맵의 기본 아이디어는 고유 키를 사용하여 해당 값을 효율적으로 검색하는 것입니다. 맵(map)에서 키는 요소를 구성하고 특정 요소를 빠르게 검색하는 방법을 제공하는 데 사용됩니다. 키는 일반적으로 정수 또는 문자열이지만 동일한지 비교할 수 있는 모든 데이터 유형이 될 수 있습니다. 값은 모든 데이터 유형이 될 수 있습니다. 맵(map)의 구현은 프로그래밍 언어와 특정 사용 사례에 따라 달라질 수 있습니다. 예를 들어 C++에서 std::map 클래스는 효율적인 삽입, 삭제 및 검색 작업을 허용하는 균형 잡힌 트리로 구현됩니다. 맵(map)에서 제공하는 기본 작업..

공부/C++ 2023.01.13

벡터(Vector)와 리스트(List)의 개념 및 차이점

1. 벡터(Vector) 벡터의 개념을 알기 위해서는 먼저, 배열을 알아야 합니다. 배열은 모두 동일한 유형을 갖는 요소들을 저장하는 데이터 구조입니다. 이 요소들은 저장 될 때 메모리에 연속적으로 저장됩니다. 즉, 요소와 요소 사이에 간격이 없이 차례로 메모리에 배치됩니다. 배열은 배열의 위치(인덱스(index))에 따라 배열 개별 요소에 효율적으로 액세스할 수 있는 간단한 데이터 구조입니다. 배열에 있는 요소의 인덱스는 배열에 있는 요소의 위치에 해당하는 음이 아닌 정수입니다. 즉, 첫 번째 요소는 인덱스가 0이고 두 번째 요소는 인덱스가 1인 식입니다. 배열의 각 요소는 배열 표기법을 사용하여 인덱스로 액세스할 수 있습니다. 예를 들어 myArray[i]는 myArray의 i번째 요소를 반환합니다...

공부/C++ 2023.01.10

static_cast와 dynamic_cast의 개념 및 차이점

1. static_cast static_cast는 한 유형에서 다른 유형으로 유형 변환을 수행하는 C++ 연산자입니다. static_cast의 기본 구문은 다음과 같습니다. 여기서 new_type은 변환하려는 유형이고 original_value는 변환하려는 값입니다. new_type new_value = static_cast(original_value); static_cast는 아래 서술한 상황과 같이 다양한 유형 변환을 수행하는 데 사용할 수 있습니다. 1. int에서 float로 또는 double에서 int로의 기본 유형 간 변환 2. char*와 같은 포인터 유형을 void*로 변환합니다. 3. 파생 클래스 포인터에 대한 기본 클래스 포인터와 같은 관련 클래스 간 변환. static_cast는 "최..

공부/C++ 2023.01.10

스마트 포인터와 스마트 포인터의 종류

스마트 포인터란 포인터처럼 작동하지만 사용하기 쉽고 오류가 발생하기 쉬운 추가 기능이 있는 객체 유형입니다. 스마트 포인터는 일반적으로 동적으로 할당된 개체의 수명을 관리하는 데 사용되며, 메모리 누수 및 댕글링 포인터와 같은 일반적인 문제를 방지하는 데 도움이 될 수 있습니다. 스마트 포인터에는 여러 유형의 스마트 포인터가 있으며 각각 고유한 동작과 기능이 있습니다. 예를 들어 unique_ptr은 자신이 가리키는 개체를 소유하는 스마트 포인터 유형이며, unique_ptr이 범위를 벗어날 때 개체가 자동으로 삭제되도록 합니다. 다른 예로는 shared_ptr은 여러 포인터가 동일한 개체를 가리킬 수 있도록 하는 스마트 포인터 유형이며 개체를 가리키는 모든 shared_ptr이 범위를 벗어날 때만 개체..

공부/C++ 2023.01.06

Static과 extern의 개념 및 차이

C언어 및 C++ 언어에서 static 및 extern 키워드는 변수와 함수의 가시성과 종료 시점을 수정하는 데 사용됩니다. 일반적으로 static 변수와 함수는 사용할 수 있는 범위가 제한되어 있습니다. 즉, 정의된 파일 내에서만 해당 변수와 함수를 볼 수 있고 액세스할 수 있습니다.static 변수는 프로그램의 데이터 세그먼트에도 저장되며 프로그램이 시작될 때 0으로 초기화됩니다. static 함수 또한 데이터 세그먼트에 저장되며 다른 파일에는 표시되지 않습니다. 반면에 extern 변수와 함수는 전역 범위를 갖습니다. 즉, 프로그램의 모든 파일에서 볼 수 있고 액세스할 수 있습니다. extern 변수는 데이터 세그먼트에 저장되며 static 변수와 마찬가지로 프로그램이 시작될 때 0으로 초기화됩니다..

공부/C++ 2022.12.29

Dynamic_cast 내부동작은 어떻게 되는가?

Dynamic_cast 글을 읽기 전 가상 함수, 가상 함수 테이블 게시물을 읽으면 더욱 이해하기 편합니다. https://shung2.tistory.com/584 가상 함수와 가상 함수 테이블 개념 및 차이 객체 지향 프로그래밍에서 가상 함수(Virtual Function)는 파생된 클래스에서 재정의할 수 있는 멤버 함수입니다. 기본 클래스와 동일한 구문을 사용하고, 호출되는 동안 파생된 클래스에서 변경되 shung2.tistory.com C++에서 dynamic_cast 연산자는 런타임에 캐스트를 수행하는 데 사용됩니다. 포인터나 참조를 한 유형에서 다른 유형으로 변환하는 데 사용되며, 여기서 대상 유형은 다형성 클래스(최소한 하나의 가상 함수(Virtual Function)가 있는 클래스)입니다. ..

공부/C++ 2022.12.23

가상 함수(Virtual Function)와 가상 함수 테이블(Virtual Function Table) 개념 및 차이

객체 지향 프로그래밍에서 가상 함수(Virtual Function)는 파생된 클래스에서 재정의할 수 있는 멤버 함수입니다. 기본 클래스와 동일한 구문을 사용하고, 호출되는 동안 파생된 클래스에서 변경되거나 "재정의"될 수 있기 때문에 "가상"이라고 합니다. 가상 함수(Virtual Function)는 일반적으로 해당 클래스의 요구 사항에 맞게 파생 클래스에서 수정할 수 있는 함수의 기본 구현을 제공하는 데 사용됩니다. 이렇게 하면 기본 클래스가 함수의 기본적인 구현을 제공할 수 있고 파생 클래스가 필요한 경우 더 특수화된 동작으로 해당 구현을 재정의할 수 있으므로 유연성과 코드 재사용이 가능합니다. 아래 예제는 C++에서 가상 함수의 예제입니다. class Animal { public: virtual v..

공부/C++ 2022.12.22

Vector resize, reserve의 차이점

C++ 표준 템플릿 라이브러리(STL)에서 Vector 클래스는 새로운 요소들을 추가 및 제거할 때 동적으로 크기를 조절하는 시퀸스 컨테이너입니다. 이 중 벡터는 크기를 변경할 수 있는 두 가지 멤버 함수를 제공합니다. 하나는 resize()이며, 다른 하나는 reserve()입니다. 1. resize() resize()는 벡터의 사이즈(=크기, size)를 사용자가 지정한 사이즈(=크기, size)로 변경합니다. 만약 새 사이즈가 현재 크기보다 크면 새롭게 추가된 값들을 기본값으로 채우며, 새 사이즈가 현재 사이즈보다 작으면 기존 벡터에서 가지고 있던 값 중 초과된 인자값들은 제거합니다. 말로써 이해하기 어려울 경우, 다음 예제를 확인해보세요. #include #include int main() { /..

공부/C++ 2022.12.21

포인터(Pointer)와 참조자(Reference)의 차이

C++을 공부하다면 C언어도 있었던 포인터(Pointer)와 유사한 개념인 참조자(Reference)가 나타나게 된다. 언뜻 보면 둘을 사용하는 용도가 비슷한데, 해당 포스팅에서는 다음과 같이 5개를 알아볼 것이다 1. 참조자(Reference)란? 2. 포인터(Pointer)와 참조자(Reference)의 어떤 차이점이 있는가? 3. 내부적으로 어떻게 달리 동작하는가? 4. 왜 참조자(Reference)가 등장하게 되었는가? 5. 그렇다면 언제 포인터(Pointer)와 참조자(Reference)를 구분지어서 사용해야 할까? 에 대해서 알아보자. 1. 참조자(Reference)란? 이미 선언한 변수를 대신하는 또 하나의 변수입니다. 이해하기 쉽게 말하면 우리가 친구들을 이름으로 부르지 않고 '별명'으로 ..

공부/C++ 2022.12.20

Vector push_back과 emplace_back의 차이

push_back은 벡터의 끝에 인자 값을 추가하는 vector 클래스의 함수입니다. 이 때 push_back은 추가할 인자 값은 현재 위치에서 값을 복사하거나 이동하여 벡터에 추가됩니다. std::vector v; int x = 1; v.push_back(x); // v 벡터에서 이제 [1]을 포함합니다 위 예에서 push_back은 인자 값 x를 복사하여 벡터의 끝에 추가합니다. 즉, 인자 값(1)의 새로운 복사본이 생성되어 벡터에 추가되고 원래 요소인 x는 변경되지 않은 상태로 유지됩니다. 반면에 emplace_back 또한 벡터에 끝에 인자 값을 추가하는 vector 클래스의 함수이지만, 기존 값들을 복사하거나 이동하는 연산을 하지 않고, 제자리에서 인자값을 구성하여 생성합니다. 이로 인해 인자 ..

공부/C++ 2022.12.16

구조체(Struct)와 클래스(Class)의 개념과 차이

구조체(Struct) 어떤 객체를 표현할 때 1가지의 변수만으로 해당 객체를 표현하기 힘든 경우가 있다. 예를 들어 사람이라는 객체를 표현하려고 할 경우 이름, 나이, 성별, 키, 몸무게 등 다양한 정보에 대한 변수가 필요하게 된다. // 이름, 나이, 성별, 키, 몸무게 string name; int age; string sex; int height; int weight; 사람이 1명뿐이라면 이렇게 5개의 변수를 하나하나씩 선언하여 사용해도 상관없지만, 사람이 10명, 혹은 100명이 되어 더 많아진다면 사람이 추가될 때 마다 새로운 변수를 5개 씩 만들어줘야한다. 이러한 점을 해결하기 위해 C++에서는 여러 개별 변수(이름, 나이, 성별 키, 몸무게)를 하나로 그룹화하여 데이터 유형으로 생성할 수 있..

공부/C++ 2022.12.14

열거형(enum)과 열거형 클래스(enum class)의 개념, 사용법, 차이점

열거형이란? 컴퓨터 프로그래밍에서 열거형(enumerated type, enumeration), 이넘(enum)은 요소, 멤버라 불리는 명명된 값의 집합을 이루는 자료형이다. 열거자 이름들은 일반적으로 해당 언어의 상수 역할을 하는 식별자이다. 출처 : 위키백과 '열거형' 이렇게 설명을 보니 쉽게 이해가 되지 않는다. 보다 쉽게 설명하자면 사용자가 자신이 필요한 정보를 열거(=선언, 정의)하여 사용하는 집합 자료형이다. 이 때 사용자가 명명한 상수 집합은 모든 값이 정수 상수 값을 가지며, 이 때 특정 자료에 사용자가 원하는 정수 값을 할당 할 수도 있다. 열거형은 enum 키워드를 통해 사용할 수 있다. 예를 들어 열거형을 사용하여 다음과 같은 색상 집합을 정의할 수 있다. // 'Color'라는 새로..

공부/C++ 2022.12.14
반응형