목록게임프로그래밍 (83)
bdfgdfg
std::deque deque 컨테이너는 시퀀스 컨테이너이며 배열 기반(연속적인 메모리) 기반의 컨테이너. -> deque(double ended queue)는 앞과 뒤에서 삽입과 삭제가 가능한 자료구조. deque 컨테이너는 위 그림과 같이 앞과 뒤에 데이터들이 추가될 수 있는 형태. 또한 데이터 요소를 저장하는 여러개의 메모리 단위를 갖는다. std::vector 컨테이너와 비슷하면서도 가장 큰 차이점이 존재하는데, vector의 경우에는 배열이 가득차면 새로운 메모리 블럭을 만들고 기존의 데이터를 복사한 다음 기존의 메모리 블럭을 부숴버린다. deque의 경우에는 메모리가 가득차도 복사 후 파괴(이사)가 아닌 새로운 메모리 블럭을 하나 더 만들뿐이다. 위 그림처럼 하나의 메모리 블럭에서 요소가 가득..
std::list std::list는 이중 연결 리스트로 선형 구조를 가지는 시퀀스 컨테이너이며 노드 기반으로 데이터를 저장한다. std::vector 컨테이너와는 달리 임의접근 연산자는 지원하지 않지만 push_front, push_pop 같은 기능을 지원한다. 이중 연결 리스트 자료구조를 이해했다면 전혀 어렵지 않다. 먼저 std::list를 사용하기 위해서는 list 헤더파일을 추가해야 한다. 기본적인 생성방법 1 2 3 4 5 6 7 8 // 비어있는 상태의 list 컨테이너를 생성 std::list li; // 0으로 초기화 된 요소 10개를 가진 list 컨테이너를 생성 std::list li2(10); // 5로 초기화 된 요소 10개를 가진 list 컨테이너를 생성 std::list li3..
std::vector 시퀀스 컨테이너는 객체들을 순차적으로 저장하는 컨테이너. std::vector는 배열의 형태로 객체를 순차적으로 저장하며 가변길이(동적) 배열이다. 즉 원소의 수가 증가하면 자동으로 배열의 메모리를 늘려 데이터를 저장한다. 먼저 std::vector를 사용하기 위해서 vector 헤더파일을 추가해야 한다. 기본적인 생성방법. 1 2 3 4 5 6 7 8 // 동적 배열이기에 처음에 크기를 정해줄 필요가 없다. std::vector v; //0으로 초기화 된 10개의 원소를 가지는 vector를 생성. std::vector v(10); //5로 초기화 된 10개의 원소를 가지는 vector를 생성. std::vector v(10,5); //v2는 v1 vector를 복사. std::v..
shared_ptr(공유 포인터) 스마트 포인터 중 하나. 이름에서 알 수 있듯이 원시 포인터가 가리키는 객체가 단 하나만이 가능한 유니크포인터와는 달리 공유포인터는 여러개의 공유포인터가 하나의 객체를 가리킬 수 있으며 아무도 가리키지 않을 때 자동으로 바로 해제 된다. 더 자세히 설명하기전에 메모리 관리기법에 대해 조금 알고있어야한다. 1. 가비지 컬렉션(Garbage Collection, GC) - Java,C#등 2. 참조 카운팅(Reference Counting) Java나 C#에서 사용되는 가비지 컬렉션은 사용하지 않는 객체를 알아서 판단하여 메모리를 회수한다. 매주기마다 가비지 콜렉션의 루트를 확인하여 힙에 있는 메모리에 루트를 통해 접근할 수 있는지 판단하고 접근할 수 없다면 가비지(쓰레기)..