C++

· C++
enum class? enum class는 C++11에서 enum 자료형의 단점을 보안하기 위해 도입된 것이다. enum의 문제점은 enum은 별도의 이름공간(namespace)를 가지고 있지 않는 것 간단히 이야기하면 enum 들을 정확하게 구분하기 위해서 enum class가 도입된 것 기존 enum의 문법 #include using namespace std; enum ECar{ BMW, AUDI, KIA, BENZ, HYUNDAE, PORSCHE, }; enum EKoreaCar{ KIA, HYUNDAE, }; int main(void) { int num = KIA; //error cout
· C++
nullptr(널포인터)? nullptr은 C++11부터 추가된 새로운 키워드이다. 기존 C, C++은 NULL이나 0을 사용해 포인터를 초기화 하였다. nullptr은 널 포인터 값(Null Pointer Value)를 나타내는 포인터 리터럴(Pointer Literal)이다. 즉, 포인터를 표현하는 값 중 널을 표현한 값이다. int* ptr1 = 0; int* ptr2 = nullptr; 기존의 방식과 동일하게 0으로 초기화할 수 있지만 nullptr을 사용하는 것이 직관적 이전에 0을 사용해서 초기화하는 방식은 실제 0을 저장시 모호한 상황이 발생할 수 있음 nullptr 사용 시 모호한 상황이 아닌 포인터만 체크할 수 있다는 장점이 있음 nullptr_t 타입 C++11부터 만들어진 nullpt..
· C++
static_cast? C++에서 제공하는 기능중 하나로 프로그래머가 형변환을 할 때 오류를 체크 기본 형태 static_cast(대상); static_cast(expression) 논리적으로 변환 가능한 타입을 변환 compile 타임에 형변환에 대한 타입 오류를 잡아준다. 실수와 정수, 열거형과 정수형, 실수와 실수 사이의 변환 등을 허용 Array -> point로 변환이 가능 function -> function pointer로 변환이 가능 포인터 타입을 다른 것으로 변환하는 것을 허용하지 않는다. 단, 상속 관계에 있는 포인터 끼리는 변환이 가능 바꾸려는 타입에는 void 형이 올 수 있지만 계산 후 제거된다. 일반 변수 간의 형변환 #include using namespace std; int ..
· C++
Array의 특징 Array는 크기가 정해진 캡슐화된 컨테이너 클래스 플릿이다. 크기가 고정되어 있어 heap이 아닌 stack 공간에 원소가 저장된다. 기본 자료형으로 제공하는 고정 배열과 동일한 공간에 저장된다. Array는 원소의 타입과 배열의 크기를 매개변수로 사용한다. Array는 배열이기 때문에 연속된 메모리 공간에 데이터를 저장한다. Array 컨테이너를 사용 시 고정 배열을 사용할 때와 다르게 함수 전달 시 포인터로 형 변환 되지 않는다. 고정 배열보다 Array를 사용하면 내장 멤버 함수를 통해 편리하게 원소에 접근할 수 있다. [], at()을 통한 임의 접근으로 원소에 접근할 수 있다. 생성 및 원소 접근 Array는 요소의 자료형과 원소의 개수를 명시하여 생성할 수 있다. []과 a..
· C++
List의 특성 List는 Node 기반 컨테이너이다. List는 이중 연결 리스트(Doubly Linked List)로 구현되어 있다. 이중 연결 리스트 구조로 인해 임의의 위치에 있는 요소에 바로 접근할 수 없다. 원소의 시작과 끝 위치만 기억하기 때문에 임의의 위치에 있는 요소에 접근하기 위해서는 링크를 하나씩 따라가야한다. itr++ // itr ++ itr-- // --itr 가능 itr + 5 // 불가능! List는 Vector와 달리 노드 기반으로 서로 연결되어 있어 원소를 삽입하거나 삭제할 때 모든 원소를 밀어내지 않아 속도가 빠르다. 삭제시 반복자가 가리키는 원소 자체를 삭제해야 원소가 사라지며, 동작자체에서 반복자를 무효화 시키지 않는다. List는 이중 연결 리스트로 구현되어 있여 ..
· C++
Vector의 특성 Vector는 동적 배열로 구현되어 있다. 동적이란 프로그램이 실행될 때 무언가가 변화한다는 뜻이다. Vector는 실행 시 원소의 개수가 변할 수 있다. 배열에서 변화할 수 있는 것은 원소의 개수이기 때문이다. Vector는 연속된 메모리를 사용하여 원소를 저장한다. 원소가 가득차게되면 메모리를 요청하여 새로 확보한다. 현재 담을 수 있는 원소의 개수보다 더 큰 메모리 공간을 요청 새 메모리에 현재 원소를 모두 복사 복사한 원소들의 다음 위치에 새 원소를 추가한다. 이전에 사용한 메모리는 반환한다. Vector의 메모리 할당 연산은 큰 비용을 요구한다. 장단점 장점 Vector의 크기는 동적으로 조정이 가능하다. Vector는 [] 연산자를 통해 배열과 같이 특정 인덱스의 원소에 바..
· C++
Unordered Map의 특성 표준이 아닌 hash map 대신 unordered_map을 표준으로 정의 마이크로소프트에서도 hash_map보다는 unordered_map을 권장하고 API 문서도 제공 hash map은 성능이 보장되지 않기 때문에 권장되지 않는다. 순서있게 자료를 유지하지 않고, 입력받은 Data를 테이블에 저장한다. 입력받은 Data를 Hash 함수를 통해 Hash Table에 저장하는 것이 핵심 Key-Value 쌍으로 데이터를 저장하고, Key를 통해 Data를 빠르게 찾을 수 있다. Hash 함수를 사용하는 이유 많은 양의 Data를 저장할 때, 검색 속도를 O(1) 수준으로 만들어 버리는 강력한 솔루션이다. 시퀀스 기반의 Vector와 list 등의 검색 속도는 데이터 양에 ..
· C++
Map의 특성 Map은 Key와 Value 쌍을 특별한 순서로 저장하고 있는 연관 컨테이너(Associative Container)다. 이진 트리(Red-Black Tree)로 구현되어있고, Key를 통해 Value에 접근하고자 할 때, [] 연산자를 사용해서 접근할 수 있다. RB Tree는 쉽게 말하면 자가 균형 이진 트리이다. https://hanseongbugi2study.tistory.com/94 Red-Black Tree (RB Tree) What? Red - Black Tree는 자가 균형 이진 탐색 트리이다. 레드 - 블랙 트리는 아래와 조건을 만족한다. 모든 노드는 빨간색 혹은 검은색이다. 루트 노드는 검은색이다. 모든 리프 노드들은 검은색이다. hanseongbugi2study.tist..
hanseongbugi
'C++' 카테고리의 글 목록