반응형

프로그래밍/C++ 28

STL map

vector와 list에는 큰 단점이 하나 존재하는데 바로 "원하는 조건에 해당하는 데이터를 찾는 속도가 느리다!" 그렇다면 이런 상황에서는 뭘 사용해야할까? map - 균형 이진 트리로 데이터를 저장하는 자료구조 c++의 map은 python과 C#의 dictionary라고 생각하면 된다 map을 생성할때 key와 value를 넣고 나중에 key로 value를 꺼내는 형식임 // map m; map m; // 데이터 생성 m.emplace(1, 2); // key = 1, value = 2 m.emplace(5, 23); m.insert(make_pair(2, 100)); // key = 2, value = 100 : key값이 이미 사용중이면 작동 안함 // 데이터 출력 cout

프로그래밍/C++ 2022.11.06

STL deque 정리

deque - Double - ended queue // 데크 - 말 그대로 Double ended queue, "앞과 뒤에서 삽입, 삭제가 가능" deque를 쉽게 이해하기 위해선 deque를 "list와 vector의 짬뽕"이라고 생각하면된다. deque를 이해하기 위한 짤막한 vector, list 메모리 할당 설명 -vector 할당 받은 메모리를 다 사용하면 "1.5배 더 큰 메모리를 새로 할당"받고 데이터 이전 -list 아무 위치나 메모리를 할당받은 다음 "논리적으로 서로를 연결" deque 설명 deque는 16byte의 메모리를 할당받고 그 메모리를 "vector처럼 사용함" ( 임의 접근 가능 ) 이후 메모리를 다 사용하면 다른 위치에 16byte의 "메모리를 추가로 할당" 받는데 li..

프로그래밍/C++ 2022.11.04

STL list 정리

c++에서의 list는 연결리스트를 의미함 배열과 달리 "각각의 데이터가 일자로 쭈~욱" 있는게 아니라 "메모리상에 따로 떨어져" 있어도 노상관 list의 종류 - 연결 리스트 [ node ] --> [ node ] --> [ node ] --> [ node ] - 이중 연결 리스트 [ node ] [ node ] [ node ] [ node ] - 원형 연결 리스트 [ tail ] [ node ] [ node ] [ header] [ tail ] node 안의 정보 - 연결 리스트 현재 노드에 담겨 있는 데이터와 다음 노드의 주소 - 이중 연결 리스트 현재 노드에 담겨 있는 데이터와 다음 노드의 주소와 이전 노드의 주소 - 원형 연결 리스트 현재 노드에 담겨 있는 데이터와 다음 노드의 주소와 이전 노드..

프로그래밍/C++ 2022.11.03

클래스 템플릿

template class RandomBox { public: T GetRandomData() { int idx = rand() % 10; return _data[idx]; } public: T _data[10]; }; template를 사용하면 "클래스에서 사용하는 타입별"로 "클래스를 여러개 만들 필요" 없이 하나로 대체가 됨 template // "int SIZE = 10"처럼 default 값을 넣어줄 수 있음 class RandomBox { public: T GetRandomData() { int idx = rand() % SIZE; return _data[idx]; } public: T _data[10]; }; "2개 이상의 타입"을 받을 수도 있고 "타입 지정 "및 "함수처럼 default ..

프로그래밍/C++ 2022.11.01

함수포인터

변수 포인터! int a = 10; typedef int DATA; // int를 DATA라는 이름으로 대체 // 1) 포인터* // 2) 변수 이름pointer // 3) 데이터 타입int DATA* pointer = &a; 함수 포인터! int Add(int a, int b) { return a + b; } typedef int (FUNC_TYPE)(int a, int b); // 구버전 using FUNC_TYPE2 = int(int a, int b); // 신버전 // 1) 포인터* // 2) 변수 이름fn // 3) 데이터 타입함수 (인자는 int, int 반환은 int) FUNC_TYPE* fn; fn = &Add; // &생략가능 // 이왕이면 이걸로 int(*fn2)(int, int); f..

프로그래밍/C++ 2022.10.31

캐스팅

static_cast dynamic_cast const_cast reinterpret_cast 1. STATIC_CAST 타입 원칙에 비춰볼 때 상식적인 캐스팅만 허용해준다 int hp = 100; int maxHp = 200; float ratio = static_cast(hp) / maxHp; // 부모->자식 자식->부모 Player* p = new Knight(); Knight* k1 = static_cast(p); 2.DYNAMIC_CAST 상속 관계에서의 안전 형변환 - RTTI ( RunTime Type Information) 다형성을 활용하는 방식 ㅡ virtual 함수를 하나라도 만들면, 객체의 메모리에 가상 함수 테이블 (vftable) 주소가 기입된다. ㅡ 만약 잘못된 타입으로 캐스팅..

프로그래밍/C++ 2022.10.24
반응형