<UEC++容器>
1.容器是方便存储数据的载体
2.虚幻提供了三种容器:TArry,TMap,TSet。虚幻提供的容器都是同质容器,只能用来存储相同类型的数据。三种容器具备不同的特性,针对不同的特性,我们可以根据使用场景选择操作的容器.
3.虚幻中的容器使用泛型特性进行构建。
TArray 特点: 速度快,内存消耗小,安全性高
TArray为同质容器:其所有元素均完全为相同类型。不能进行不同元素类型的混合!
TArray被设计成值类型 所以无法被继承!
不能使用new和delete 在堆上进行创建销毁。元素也是数值类型,为容器拥有。TArray被销毁时元素也会被销毁。TArray不存在共享状态.
构建TArray
TArray<类型名>变量
TArray<FString> Array;
使用例子:
.h文件
TArray<USceneComponent*> PipeGroup;
.CPP文件
for (int32 i = 0; i < 3; i++)
{
FString GroupRootName = FString::Printf(TEXT("RootGroup%d"), i);
USceneComponent * PGroup = CreateDefaultSubobject<USceneComponent>(*GroupRootName);
FString GroupPipUp = FString::Printf(TEXT("PiUp%d"), i*2);
UPaperSpriteComponent * UpCom = CreateDefaultSubobject<UPaperSpriteComponent>(*GroupPipUp);
FString GroupPipDown = FString::Printf(TEXT("PiDown%d"),i*2 + 1);
UPaperSpriteComponent * DownCom = CreateDefaultSubobject<UPaperSpriteComponent>(*GroupPipDown);
PGroup->SetupAttachment(RootComponent);
UpCom->SetupAttachment(PGroup);
DownCom->SetupAttachment(PGroup);
UpCom->SetSprite(UpPipeMesh.Object);
DownCom->SetSprite(DownPipeMesh.Object);
UpCom->SetRelativeLocation(FVector(0,0,-220));
DownCom->SetRelativeLocation(FVector(0,0,190));
PipeGroup.Add(PGroup);
}
容器在构建时,不要构建为堆对象!直接构建成栈对象!
由于模板类,在构建时必须指出存储数据类型。
遍历
//这个变量名是自己定义的
for(auto &变量名::Array)
使用方法
for(auto &变量名::Array) {
GEngine->AddOnScreenDebugMessage(-1, 2, FColor::Green,*变量名);
}
迭代器方法遍历:
容器的定义
TArray<FString> Myarr;
for (int32 i = 0; i < 3; i++)
{
FString Mydata = FString::Printf(TEXT("Number%d"), i);
Myarr.Add( Mydata);
}
迭代器遍历
for (auto ite = Myarr.CreateIterator();ite; ++ite)
{
GEngine->AddOnScreenDebugMessage(-1, 2, FColor::Green,*ite);
}
TArray容器查找内容
Myarr.Contains(TEXT("查找内容")); //返回值是bool类型