官方文档学习TArray数组的运算符
三.运算符
就是我们常说的深拷贝,完全复制一个对象到另一个数组。
MoveTemp的实现原理,应该先进行了深拷贝。再将原动态数组清空。
1.重载== 运算符
元素自身要有 == 。数组要顺序数量同时相同,才能叫数组间的相同。
最后敲一遍实例代码,会有更深的理解。
void AWXArrayActor::OperateArray()
{
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];
TArray<int> SValArr3 = MoveTemp(ValArr4);
// ValArr3 == [5,2,3,1,2,3]
// ValArr4 == []
ValArr4 += ValArr3;
// ValArr4 == [5,2,3,1,2,3]
TArray<int32> ValArr5 = ValArr3;
TArray<int32> ValArr6;
ValArr6 += ValArr4;
ValArr6.Append(ValArr3);
TArray<int32> ValArr7 = {1,1,1};
ValArr7 = MoveTemp(ValArr6);
}
void AWXArrayActor::OperateStrArray()
{
TArray<FString> FlavorArr1;
FlavorArr1.Emplace(TEXT("Chocolate"));
FlavorArr1.Emplace(TEXT("Vanilla"));
// FlavorArr1 == ["Chocolate","Vanilla"]
auto FlavorArr2 = FlavorArr1;
// 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, because FString comparison ignores case
Exchange(FlavorArr2[0], FlavorArr2[1]);
// FlavorArr2 == ["VANILLA","CHOCOLATE"]
bool bComparison3 = FlavorArr1 == FlavorArr2;
// bComparison3 == false, because the order has changed
}