Unreal 강의

21일차 (1/10)

루인엘다 2024. 1. 10. 11:40
Vector

Vector는 시퀸스 컨테이너이면서 배열기반 메모리 구조를 가졌다.

Vector는 안에 아무것도 없다라는 표현이 가능하다. 

Vector에는 push_back이라는 함수가 있는데 그 역할은 우선 메모리를 할당하고 그 안에 데이터를 넣는다. 새로운 데이터를 추가하면 원래의 데이터를 복사해 확장된 배열에 넣어주고 원래의 데이터를 삭제한 후 새로운 데이터를 추가한 배열을 추가한다. 이 push_back의 가장 큰 특징은 데이터를 추가할 때 기존 크기보다 더 크게 확장해서 사용한다는 것이다. 여기서 데이터가 할당되어있는 곳을 size라고 부르고  Vector가 사용하고 있는 총괄 크기는 capacity라고 부른다.

 

new와 delete는 C++에서 가장 부하가 심한 연산이다. 그래서 최대한 피하려고한다. 그런데 그냥  push_back으로 사용하면 new와 delete가 자주 반복되어 부하가 크게 걸린다.

이때 reserve라는 Vector함수를 사용하여 미리 Capacity를 확장시켜놓고 push_back을 사용하면 new와 delete의 사용횟수가 줄어들며 부하가 훨씬 적게 발생한다.

Vector에 resize함수도 있는데 이 함수는 미리 resize가 받은 인자만큼 push_back을 넣어두는 함수이다.

 

안의 데이터를 삭제할 때에는 clear함수를 사용하는데 clear함수는 이미 생성된 capacity는 건들지 않고 size만 0으로 만든다.

 

Vector는 List와는 다르게 push_front 함수가 없다. 이 함수는 맨 앞에 데이터를 추가하는 함수인데 Vector에서 이 동작을 수행하려면 모든 배열을 다시 한칸씩 옮겨서 다시 만들어야된다. 그래서 중간에 삽입하는 기능 또한 없다.

 

emplace_back은 공간을 만들어 주기만 한다.

 

Vector가 속도는 다른 자료구조들과 비교해서 가장 빠르다. 하지만 Vector는 편의성이 안좋다.

 

Vector는 유동적으로 자료의 크기가 변하는 개념에서는 직관성이 떨어져서 사용하지않는 것이 좋다.


노드

노드 구조란 자료구조 메모리의 2가지 형태 중 하나로서 어떠한 데이터가 자기자신의 데이터의 참조형을 가지면 그걸 노드구조라고 한다.

대표적으로는 List가 있다.