[UE4] TArray
TArray
TArray 는 UE4 에서 가장 자주 쓰이는 컨테이너 클래스로, 신속성, 메모리 효율성, 안전성을 염두에 두고 디자인되었습니다. TArray 유형은 두 가지 프로퍼티로 정의되는데, 주로 그 엘리먼트(element) 유형, 부로 할당자(allocator) 입니다.
더보기
엘리먼트 유형
배열에 저장되는 유형으로 동질성을 가지고 있어 다른 유형의 엘리먼트를 하나의 TArray에 저장할 수 없다.
할당자 유형
메모리에 오브젝트가 레이아웃되는 방식으로, 배열에 엘리먼트를 넣어 키우는 방식이다. 엘리먼트가 추가될 때마다
필요에따라 메모리를 제공한다.
생성 및 할당
//. 생성
TArray<int32> intArr; // 자료형<엘리먼트의 자료형> 변수명
//. Init
intArr.Init(3, 5); // {3, 3, 3, 3, 3}, 3의 복사본을 5개 할당
//. Add
stringArr.Add(TEXT("first"));
stringArr.Add(TEXT("second")); // {first, second}} 엘리멘트 유형의 인스턴스를 배열에 복사한다.
//. Emplace
stringArr.Emplace(TEXT("first"));
stringArr.Emplace(TEXT("second")); // {first, second} 지정한 인수를 사용하여 엘리멘트 유형을 새로 생성한다.
위에서 보면 Add와 Emplace는 최종 결과 {first, second} 는 같지만 Emplace는 임시 변수를 생성하지 않는다. 즉, Emplace는 Add와 달리 불필요한 복사, 이동이 없어서 퍼포먼스적으로 바람직하다고 할 수 있다.
//. Append : TArray 또 일반 C 배열로의 포인터 및 해당 배열의 크기에 다수의 엘리먼트를 한꺼번에 추가
TArray<int32> arr01;
arr01.Add(1);
arr01.Add(2);
TArray<int32> arr02;
arr02.Append(arr01); // {1, 2}
FString strArr01[] = {TEXT("One"), TEXT("Two")};
TArray<FString> strArr02(strArr01, ARRAY_COUNT(strArr01)); // {"One", "Two"}
//. AddUnique
TArray<FString> strArr;
strArr.AddUnique(TEXT("OnlyOne")); // {"OnlyOne"}
strArr.AddUnique(TEXT("OnlyOne")); // {"OnlyOne"}, 동일한 값이 존재하면 추가 X 새 값만 추가 O
//. Insert
strArr.Insert(TEXT("FirstNum"), 1); // {"FirstNum", "OnlyOne"}, 지정한 위치에 값을 추가
//. SetNum
strArr.SetNum(4); // {"FirstNum", "OnlyOne", "", ""}, TArray의 크기를 설정
strArr.SetNum(1); // {"FirstNum"}, 기존 배열보다 작을 경우 제거하기도 한다.
반복
for 반복을 사용하는 것을 권장한다.
TArray<FString> strArr;
strArr.Emplace(TEXT("I"));
strArr.Emplace(TEXT("like"));
strArr.Emplace(TEXT("apple"));
//. 01
FString strings01;
for(auto& str : strArr)
{
strings01 += str;
strings01 += TEXT(" ");
} // "I like apple"
//. 02
FString strings02
for(int32 i = 0; i < strArr.Num(); ++i)
{
strings02 += strArr[i];
strings02 += TEXT(" ");
} // "I like apple"
//. 03
FString strings03
for(auto it = strArr.CreateConstIterator(); it; ++it)
{
strings03 += *it;
strings03 += TEXT(" ");
} // "I like apple"
제거
TArray<int32> intArr;
int32 Temp[] = {1, 2, 3, 4, 5};
intArr.Append(Temp, ARRAY_COUNT(Temp)); // {1, 2, 3, 4, 5}
//. Remove
intArr.Remove(4); // {1, 2, 3, 5}, 4값을 제거한다
//. RemoveAt
intArr.RemoveAt(2); // {1, 2, 5}, 2번째값을 제거한다
//. Empty
intArr.Empty(); // {}, 모든 값을 제거한다.
그 외 자주 사용하는 것
TArray<int32> valueArr = {6, 2, 1, 4, 3, 5};
//. Num : TArray의 엘리먼트의 개수를 반환
int32 count = valueArr.Num(); // count == 6;
//. Contains : 특정 엘리먼트가 있는지 확인
bool bHaveOne = valueArr.Contains(1); // bHaveOne == true;
bool bHaveSeven = valueArr.Contains(7); // bHaveSeven == false;
//. Find : 특정 엘리먼트를 찾고 인덱스를 반환
int32 findOne = value.Find(1); // findOne == 2;
int32 findSeven = value.Find(7); // findSeven == INDEX_NONE;
//. Sort : 정렬
value.Sort(); // {1, 2, 3, 4, 5, 6}
TArray에 자주 사용하는 것들에 관해서 정리하였습니다.
'Game Programming > UE4' 카테고리의 다른 글
[UE4] BindWidget (0) | 2023.10.28 |
---|---|
[UE4] Smart Pointer (0) | 2023.10.21 |
[UE4] Delegate (0) | 2023.09.17 |
[UE4] TMap (0) | 2023.09.09 |
[UE4] Log (0) | 2022.10.13 |