연산자
- 배열은 일반적인 값 유형으로, 일반적인 생성자 복사나 할당 연산자를 통해 복사할 수 있다.
- 배열은 엘리먼트를 엄격히 소유하기에, 배열을 복사하면 '깊이'가 있어, 새 배열에는 자체적인 엘리먼트 사본이 생김
TArray<int32> ValArr3;
ValArr3.Add(1);
ValArr3.Add(2);
ValArr3.Add(3);
auto ValArr4 = ValArr3; // 복사 시작
// ValArr4 == [ 1, 2, 3 ];
ValArr4[0] = 5;
// ValArr3 == [ 1. 2. 3 ];
// ValArr4 == [ 5, 2, 3 ];
- Append 함수의 대안으로, operator += 를 통해 배열을 연결시킬 수 있다.
ValArr4 += ValArr3;
// ValArr4 == [ 5, 2, 3, 1, 2, 3 ]
- TArray에는 MoveTemp 함수를 사용해서 부를 수 있는 이동 의미론도 지원됨.
- 이동 이후 원본 배열은 공백으로 남음
ValArr3 = MoveTemp(ValArr4);
// ValArr3 == [5, 2, 3, 1, 2, 3]
// ValArr4 == []
- 배열은 operator==나 operator !=를 사용해서 비교할 수 있다.
- 엘리먼트의 순서가 중요한데, 두 배열이 동등한 경우는 엘리먼트의 수와 순서가 같을 경우만.
- 엘리먼트는 별도의 operator==를 사용해서 비교한다.
TArray<FString> FlavorArr1;
FlavorArr1.Emplace(TEXT("Chocolate"));
FlavorArr1.Emplace(TEXT("Vanilla"));
// FlavorArr1 == ["Chocolate", "Vanilla"]
auto FlavorArr2 = Str1Array;
// FlavorArr2 == ["Chocolate", "Vanilla"]
bool bComparison1 = FlavorArr1 == FlavorArr2;
// bComparison1 == true
for (auto& Str : FlavorArr2)
{
Str = Str.ToUpper();
}
// FlavorArr2 == ["CHOCOLATE", "VANILLA"]
bool bComparison2 = FlavorArr1 == FlavorArr2;
// bComparison2 == true, 왜냐하면 FString 비교는 케이스를 무시하기 때문
Exchange(FlavorArr2[0], FlavorArr2[1]);
// FlavorArr2 == ["VANILLA", "CHOCOLATE"]
bool bComparison3 = FlavorArr1 == FlavorArr2;
// bComparison3 == false, 왜냐하면 둘이 순서가 맞지 않기 때