이름은 TArray지만 vector처럼 동적할당을 바탕으로 하는 자료구조이며,
List처럼 양쪽에서 삽입 삭제가 가능하다.
TArray는 Unreal Engine에서 가장 단순한 Container Class이다.
한 가지 타입 elements의 sequence로 볼 수 있다.
C++에서 주로 사용되는 vector나 array처럼
따로 정렬은 되어있지 않고, 각 element들의 순서에 따라 sequence로 구성되어 있다.
빠르고, 안전하고, 메모리 효율이 좋다
그렇지만, 2번은 주로 생략된다. TArray가 보통 적합한 Allocator를 선택해 할당한다.
Init, Add, AddUniuqe(해당 요소가 없으면 삽입) , Append, Insert 등의 Method가 있다.
Sort()도 제공하는데, HeapSort, StableSort(우선도가 같을 때, 원 순서 적용) 등이 있다.
특이한 점.
// HeapArr == [10,9,8,7,6,5,4,3,2,1]
HeapArr.Heapify();
// HeapArr == [1,2,4,3,6,5,8,10,7,9]
이렇게 기존 배열을 Heap으로 만들 수 있고,
HeapArr.HeapPush(4); // Heap 유지하면서 삽입
// HeapArr == [1,2,4,3,4,5,8,10,7,9,6]
int32 TopNode;
HeapArr.HeapPop(TopNode); // Heap의 최상단 Pop후 reheap
// TopNode == 1
// HeapArr == [2,3,4,6,4,5,8,10,7,9]
Heap을 유지하며 삽입과 삭제가 가능하다.
이를 통해 Priority Queue를 사용할 수 있다.
또, 재밌는 기능
slack, 즉 남는 공간.
TArray에 남는 공간을 알 수 있다.
[1][2][3][4][ ][ ][ ] 이 경우 num은 4고 slack은 3이 된다.
이처럼 동적할당을 하는 자료구조의 경우, 일정 크기마다 원소의 수보다 크게
메모리를 미리 할당을 해두고 사용한다.
SlackArray.Reset(0);
// SlackArray.GetSlack() == 3
// SlackArray.Num() == 0
// SlackArray.Max() == 3
Reset() 메소드의 경우, 원소를 초기화 해 배열의 크기를 줄이는 것 같지만
원소만 삭제할 뿐, 할당된 크기는 그대로 존재한다.
https://docs.unrealengine.com/5.3/en-US/array-containers-in-unreal-engine/
🪣 UNREAL Containers - TSet (0) | 2024.02.09 |
---|---|
🪣 UNREAL Containers - TMap, TMultiMap (0) | 2024.02.09 |
🆎Unreal에서의 StringHandling(FName, FText, FString) (0) | 2024.02.08 |
언리얼 엔진의 포인터 (0) | 2024.02.08 |
🗑️언리얼의 GC (Garbage Collection) (0) | 2024.02.07 |
댓글 영역