상세 컨텐츠

본문 제목

🪣UNREAL Containers - TArray

Study/UNREAL

by J2on 2024. 2. 9. 01:40

본문

 

이름은 TArray지만 vector처럼 동적할당을 바탕으로 하는 자료구조이며,

 

List처럼 양쪽에서 삽입 삭제가 가능하다.

 

 

TArray

TArray는 Unreal Engine에서 가장 단순한 Container Class이다.

 

한 가지 타입 elements의 sequence로 볼 수 있다.

 

C++에서 주로 사용되는 vector나 array처럼

 

따로 정렬은 되어있지 않고, 각 element들의 순서에 따라 sequence로 구성되어 있다.

 

빠르고, 안전하고, 메모리 효율이 좋다

 

 

자, TArray는 2가지를 지정할 수 있다.

  1. TArray에 저장될 요소
  2. 어떤 allocator로 메모리 주소를 할당할 것인지.

그렇지만, 2번은 주로 생략된다. TArray가 보통 적합한 Allocator를 선택해 할당한다.

 

Init, Add, AddUniuqe(해당 요소가 없으면 삽입) , Append, Insert 등의 Method가 있다.

 

Sort()도 제공하는데, HeapSort, StableSort(우선도가 같을 때, 원 순서 적용) 등이 있다.

 

 

 

 

 

특이한 점.

Heap으로 사용할 수 있다.

// 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

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/

 

TArray: Arrays in Unreal Engine

 

docs.unrealengine.com

 

관련글 더보기

댓글 영역