본문 바로가기

전체 글

(201)
[C++] map vs unordered_map 1. map각 노드가 key와 value 쌍으로 이루어진 트리다. first-key, second-value pair로 저장된다.내부 원소들이 key에 따라 결정되고, key값을 이용해 value에 접근하기 때문에 key값 중복을 허용하지 않는다.C++에서 map의 내부 구현은 검색, 삽입, 삭제가 O(logn)인 레드블랙트리로 구성되어 있다. 데이터를 순서대로 보관한다. 2. unordered_mapmap보다 검색, 삽입, 삭제가 빠르다. 시간복잡도는 일반적으로 O(1), 최악의 경우 O(n)이다.해시 테이블 기반으로, 정렬이 없기 때문에 데이터를 순서 없이 보관한다.데이터가 많을 때 map보다 성능이 좋다.데이터가 적을 때는 메모리 낭비를 할 수 있고, 검색 시 오버헤드(특정 기능을 수행할 때 드는..
[C++] malloc(), free() vs new, delete 1. malloc(), free()힙에서 동적으로 메모리를 할당, 할당 해제하는 데 사용한다.malloc() 함수는 지정된 크기의 힙에 메모리 블록을 할당하는 데 사용되는 C 표준 라이브러리 함수다.할당된 메모리의 첫 번째 바이트에 대한 포인터를 반환하거나, 할당에 실패한 경우 null 포인터를 반환한다.free() 함수는 malloc()으로 할당된 메모리 블록을 할당 해제하는 데 사용되는 C 표준 라이브러리 함수다.메모리 블록에 대한 포인터를 인수로 사용하고, 다시 사용할 수 있도록 시스템에 해제한다. 2. new(), delete()C++에서 제공하는 연산자다.new: 힙에 객체의 인스턴스를 생성하고, 생성자로 생성하는 데 사용된다.새로 생성된 개체에 대한 포인터를 반환한다.delete: new로 할..
[C++] const와 pointer 1. const해당 값이 상수(변하지 않는 값)임을 지정하고, 프로그래머가 초기화 외에는 수정할 수 없게 하는 키워드다.포인터의 위치에 따라 const가 갖는 의미가 다르다. 2. 상수 포인터 (const pointer)int a = 100;int b = 200;//non const 포인터int* ptr = &a;ptr = &b; //주소 변경 가능*ptr = 300; //값 변경 가능//상수 포인터(const pointer)int* const ptr2 = &a;ptr2 = &b; //포인터가 상수이므로 변경 불가능*ptr2 = 300; //값은 변경 가능포인터 *의 우측에 const가 위치한다.포인터 변수를 상수화한 것이며, 초기에 가리키는 주소를 고정한다.선언과 동시에 초기화해야 한다. 3. 상수에..
[C++] Cast 1. Cast자료형간 형변환, 포인터간 형변환 시 사용되는 것이다.크게 묵시적 캐스트, 명시적 캐스트로 나뉜다.묵시적 캐스트 (implicit cast)는 캐스트 연산자를 사용하지 않고 형변환이 이루어지는 경우이다.데이터 손실이 발생할 가능성이 있고, 한 눈에 알아채기 어려워 유지보수에 어려움을 겪을 수 있다.int i = 1;char c = i;//묵시적 캐스트 명시적 캐스트 (explicit cast)는 캐스트 연산자를 사용해서 형변환이 이루어지는 경우이다.int i = 1;char c = (char)i;//명시적 캐스트위 예시는 C 스타일 캐스팅이다. 2. static_castC++ 스타일 캐스팅이다. 형변환 가능한지 컴파일 타임에 무결성 검사한다.float f = 1.1f;int i = stati..
[C++] 배열과 리스트 1. 배열동일한 타입의 데이터를 연속적인 메모리 공간에 저장하는 자료구조다.인덱스를 통해 빠르게 데이터에 접근할 수 있다.배열 크기를 미리 지정해야 하고, 크기 변경이 불가능하다.대량의 데이터를 다룰 때 그만큼 연속적인 메모리 공간이 필요하기 때문에, 메모리 할당에 제약을 받을 수 있다. 2. 리스트메모리 동적 할당을 통해 크기를 변경할 수 있다.노드를 통해 데이터를 저장하는데, 노드는 데이터와 다음 노드를 가리키는 참조로 구성되어 있기 때문에 연속적이지 않은 메모리 공간에 데이터를 효율적으로 저장할 수 있다.특정 인덱스의 데이터에 접근하기 위해 처음부터 순서대로 이동하는 구조이기 때문에 데이터 접근 속도가 느리다. 참고자료https://f-lab.kr/insight/understanding-data-s..
[C++] Sort 함수 1. Sort 함수C++의 algorithm 헤더에 내장되어 있는 함수다.기본적으로 오름차순 정렬을 수행한다.인트로 정렬을 사용하고 있다. #include #include //algorithm 헤더int main(){ int a[10] = {3,4,1,2,5,6,7,8,9}; sort(a, a+10); //오름차순으로 정렬 for(int i=0;i 내림차순 정렬을 하고싶으면, 그에 맞는 함수를 따로 만들어 sort함수의 세번째 인자 값으로 넣으면 된다.#include #include //algorithm 헤더bool compare(int a, int b) //왼쪽 값이 더 크도록 정렬{ return a 2. 인트로 정렬퀵 정렬, 힙 정렬, 삽입 정렬 3개의 알고리즘이 섞인 정렬으로,..
[C++] 정렬의 종류 정렬 (sort)의 종류에 대해 알아보겠다. 1. 버블 정렬 (Bubble Sort)원소의 이동이 수면으로 올라오는 거품과 비슷한 모습을 보이기 때문에 붙여진 이름이다.서로 인접한 두 수를 검사하여 수를 오름차순으로 정렬하는 알고리즘이다.배열에 아무 변화가 없을 때까지 반복한다.구현이 매우 간단하지만, 다른 정렬 알고리즘에 비해 느린 편이다. 2. 선택 정렬 (Selection Sort)주어진 리스트 중 최소값을 찾은 다음, 그 값을 맨 앞에 위치한 값과 교체하는 알고리즘이다.이 과정이 끝나면 맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체한다.구현이 간단하고, 사용 가능한 메모리가 제한적인 경우 성능에 도움을 줄 수 있다. 3. 삽입 정렬 (Insertion Sort)배열의 모든 요소를 앞에..
[C++] Name Mangling (Decoration) 1. Name ManglingMangling은 영어로 "~을 난도질하다"를 뜻한다.컴파일러가 함수나 변수의 이름을 임의로 변경하는 작업을 말한다.함수 오버로딩(같은 이름으로 다른 기능을 수행하는 함수를 만드는 것) 때문에 일어난다.여러 함수를 오버로딩 했을 때, 적절한 함수를 찾을 수 있도록 한다.C에서는 함수 오버로딩을 지원하지 않기 때문에 name mangling 기능이 없고 하더라도 간단히 하게 된다.e.g.)int SomeFunc() => SomeFunc_int SomeFunc(int some) => SomeFunc_i 2. extern "C"이후 오는 내용을 name mangling하지 말고 C처럼 symbol을 만들라는 뜻이다.int abc(int a,int b) //abcii 라는 mangl..