虚幻引擎基础入门(C++) — 【容器篇 05】

编程入门 行业动态 更新时间:2024-10-10 03:33:12

虚幻引擎基础入门(C++) — 【<a href=https://www.elefans.com/category/jswz/34/1771431.html style=容器篇 05】"/>

虚幻引擎基础入门(C++) — 【容器篇 05】

虚幻引擎基础入门(C++) — 【容器篇 05】

文章目录

  • 虚幻引擎基础入门(C++) — 【容器篇 05】
  • 前言
  • 一、TArray
      • 1、初始化构建与元素遍历**
      • 2、 添加元素
      • 3、 插入元素
      • 4、 设置容器的大小
      • 5、 迭代器
      • 6、转成普通数组
      • 7、常规查询函数
      • 7、常规移除函数
  • 二、TMap
      • 1、 初始化构建、添加元素与元素遍历
      • 2、 迭代器
      • 3、 查询函数
      • 4、移除函数
  • 三、TSet
      • 1、初始化构建、添加元素与元素遍历
      • 2、迭代器
      • 3、查询函数
      • 4、移除函数
  • 总结


上一篇:虚幻引擎基础入门(C++) — 【数据类型篇 04】

前言

容器是方便存储数据的载体,虚幻提供了三种同质容器(只能用来存储相同类型的数据):

  1. TArray(只有TArray可以使用UPROPERTY宏说明)
  2. TMap
  3. TSet

一、TArray

TArray是UE中的数组类型,速度快,内存消耗小,安全性高。

1、初始化构建与元素遍历**

void AMyGameModeBase::BeginPlay()
{//1.容器在初始化构建时,直接构建为栈对象,不要new为堆对象!TArray<FString> Array;//2.使用初始化函数添加元素(10个“牛逼”)Array.Init(TEXT("牛逼"), 10);//3.遍历元素: Num()获取TArray当前元素个数for (int32 i = 0; i < Array.Num(); i++){UE_LOG(LogTemp, Log, TEXT("%s"), *Array[i]);}//3.新语法进行遍历for (auto& i : Array){UE_LOG(LogTemp, Log, TEXT("NEW: %s"), *i);}
}

2、 添加元素

void AMyGameModeBase::BeginPlay()
{//从之前初始化创建的10个元素的数组,添加3条,又接一个长度3的数组,变成16个元素//4.Add()添加元素到数组末尾,返回当前添加元素在数组中的下标int32 Array_A = Array.Add(TEXT("你爹"));//5.Emplace()添加元素到数组末尾,返回下标Array.Emplace(TEXT("你爹1"));//6.AddUnique()只添加数组中没有的元素,如果数组中已存在该元素,则返回该元素在数组中的下标。Array.AddUnique(TEXT("你爹2"));//7.Append()复制普通数组到TArray容器中//ARRAY_COUNT(NewArray)获取新数组长度FString NewArray[3]{ TEXT("我是新数组") };Array.Append(NewArray, ARRAY_COUNT(NewArray));
}

3、 插入元素

void AMyGameModeBase::BeginPlay()
{//8.Insert(要插入的元素内容, 插入的数组下标位置)//如果插入位置超过容器的大小,将会报错//插入后元素依次向后排列,数组长度+1Array.Insert(TEXT("插入元素"), 5);
}

4、 设置容器的大小

void AMyGameModeBase::BeginPlay()
{//9.SetNum函数,用来设置容器的大小TArray<int32>NewArray;NewArray.SetNum(20);
}

5、 迭代器

void AMyGameModeBase::BeginPlay()
{//10.迭代器(设计模式):不允许修改元素个数、添加、移除//① 创建只读迭代器,只能读取for (auto i = Array.CreateConstIterator(); i; ++i){UE_LOG(LogTemp, Log, TEXT("%s"), **i);}//② CreateIterator()创建迭代器函数,可以通过迭代器修改元素内容for (auto i = Array.CreateIterator(); i; ++i){//修改Array元素*i = FString(TEXT("改个元素内容"));UE_LOG(LogTemp, Log, TEXT("%s"), **i);}
}

6、转成普通数组

void AMyGameModeBase::BeginPlay()
{//11.转成普通数组//返回类型指针,指针地址是数组中第一个元素的地址FString* NewArray = Array.GetData();
}

7、常规查询函数

void AMyGameModeBase::BeginPlay()
{//11.常规查询函数//① IsValidIndex():数组在该下标中的元素是否有效,返回布尔值Array.IsValidIndex(5);//② Last():返回容器中最后一个元素//   Last(3):返回容器中倒数第三个元素//   Top():返回容器中第一个元素Array.Last();Array.Last(3);Array.Top();//③ Contains():包含,返回布尔值Array.Contains(TEXT("牛"));//④ Find():查询,返回该元素在数组中的下标(没有则返回-1)Array.Find(TEXT("牛逼"));//查询给定元素所在位置,将位置索引设置到Index,返回布尔值//(即能返回布尔,也会返回元素所在位置)int Index = 0;Array.Find(TEXT("牛逼"), Index);
}

7、常规移除函数

void AMyGameModeBase::BeginPlay()
{//12.常规移除函数//① 在容器中移除给定元素,返回移除的元素个数int32 RemoveNum = Array.Remove(TEXT("牛逼"));//② 移除容器中找到的第一个给定元素//(返回1表示移除成功,返回0则说明容器中没有这个元素)int32 RemoveIndex = Array.RemoveSingle(TEXT("牛逼"));//③ 移除给定下标位置的元素Array.RemoveAt(2);//④ 清空容器Array.Empty();
}

二、TMap

  1. 关联型容器,存储对象均有一个关联值,通过键值可以高效的进行对象访问
  2. Map的结构例如钥匙和锁,一把钥匙找一把锁,他们之间是对应的关系
  3. 映射被销毁时,其元素也将被销毁
  4. 键类型必须为值类型,不能使用指针

1、 初始化构建、添加元素与元素遍历

void AMyGameModeBase::BeginPlay()
{//1.初始化构建容器,键值类型为FString,数据类型为int32TMap<FString, int32>Map;//2.添加元素//注意:添加Map容器中已有的键值,会覆盖之前键值对应的元素Map.Add(TEXT("K1"), 111);//添加元素时,只添加键值会使用默认元素值Map.Add(TEXT("K2"));//可以用这种方法修改数据内容,但不能添加Map[TEXT("K2")] = 222;//3.Append()合并元素//将NewMap中的键值和对应元素,复制到MapTMap<FString, int32>NewMap;Map.Append(NewMap);//4. 元素遍历for(auto& Item : Map){Item.Key;  //获取键值Item.Value;  //获取元素UE_LOG(LogTemp, Log, TEXT("% s,%d"), *Item.Key, Item.Value);}
}

2、 迭代器

void AMyGameModeBase::BeginPlay()
{//5.迭代器for (auto i = Map.CreateConstIterator(); i; i++){//禁止修改i.Key();i.Value();}for (auto i = Map.CreateIterator(); i; i++){//获得键值i.Key();i.Value() = 100;i->Value;}
}

3、 查询函数

void AMyGameModeBase::BeginPlay()
{//6.查询函数//① 查询容器中元素个数Map.Num();//② 是否包含Map.Contains(TEXT("111"));//③ 返回键值对应的元素指针,如果没找到内容则返回空指针Map.Find(TEXT("222"));
}

4、移除函数

void AMyGameModeBase::BeginPlay()
{//7.移除函数//① 使用给定键值移除元素Map.Remove(TEXT("K1"));//② 清空容器Map.Empty();
}

三、TSet

  1. 也是键值容器(和TMap类似),但速度快,无需提供单独的键进行关联元素,不允许有重复的键
  2. TSet是KV容器,不保证数据填充顺序。
  3. TSet数据存储时无法重复存储,TArray可以

1、初始化构建、添加元素与元素遍历

void AMyGameModeBase::BeginPlay()
{//1.初始化构建TSet<FString>Set1;//2.添加元素Set1.Add(TEXT("哟西"));//3.允许合并操作TSet<FString>Set2;Set1.Add(TEXT("斯国一"));Set2.Append(Set1);  //将Set1中元素复制一份添加到Set2中//4.元素遍历for (auto& Item : Set2){UE_LOG(LogTemp, Log, TEXT("%s"), *Item);}
}

2、迭代器

void AMyGameModeBase::BeginPlay()
{//5.普通迭代器for (auto Item = Set1.CreateIterator(); Item; Item++){}//6.只读迭代器for (auto Item = Set1.CreateConstIterator(); Item; Item++){*Item;  //获取内容,禁止修改}
}

3、查询函数

void AMyGameModeBase::BeginPlay()
{//7.获取容器中元素类型Set1.Num();//8.检查元素中是否包含给定的键值Set1.Contains(TEXT("西"));//9.如果查找某一元素是否存在,可直接使用Find进行单一查找,返回找到指向元素的指针,没找到则返空Set1.Find(TEXT("西"));//10.将TSet容器转为TArray容器Set1.Array();
}

4、移除函数

void AMyGameModeBase::BeginPlay()
{//11.移除给定键值内容,成功返回1,失败返回0Set1.Remove(TEXT("西"));//12.移除所有元素,释放空间Set1.Empty();//13.移除元素,但不释放空间Set1.Reset();
}

总结

以上就是今天要讲的内容,本文仅仅简单介绍了虚幻引擎中容器的使用。

如有帮助给个关注吧!

下一篇:虚幻引擎基础入门(C++) — 【宏定义 06】

更多推荐

虚幻引擎基础入门(C++) — 【容器篇 05】

本文发布于:2024-02-06 12:21:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1748875.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:容器   虚幻   入门   引擎   基础

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!