zoukankan      html  css  js  c++  java
  • 3D游戏开发之UE4中的集合:TSet容器

    好久没有更新了,最近一直在老家过年,网络不通的,今天才有时间更新一集。

    一、TSet<T>是什么

    UE4中,除了TArray动态数组外,还提供了各种各样的模板容器。这一节,我们就介绍集合容器——TSet<T>。类似于TArray<T>,尖括号里面的T是模板类型,可以是任何C++类型。一个集合表示了一组互不重复的数据元素。比如TSet<float>表示了一组float集合,TSet<FString>表示了一组FString集合。

    二、创建和填充集合

    因为这些容器在设计的时候考虑到一致性,所以后面你在学习各种各样的容器,你都会发现它们都具有相同或相似的函数,调用方法也是大同小异。类似TArray,TSet也有Add函数和Emplace函数,举个例子:

    TSet<int> set;
    set.Add( 1 );
    set.Add( 2 );
    set.Emplace( 3 );
    set.Add( 1 );// 这个操作虽然可以编译运行,但是因为其元素已经存在,所以不会对现有集合发生影响
    set.Emplace( 2 );// 同上
    

     注意,集合的内部数据结构是二叉树,而不是简单地按编号排序的,因此不能通过方括号[]来访问集合中的元素。

    //set[0] = 4; //试图通过[]操作符来访问集合元素,但这样的操作是非法的
    

     Tset中也有类似于TArray的Push函数,但是不叫Push,那就是Append函数,用法也是和Push一样的。

    void Append( const TArray< ElementType > & InElements )
    void Append( TArray< ElementType > && InElements )
    

     三、迭代集合

    因为TSet不能通过[]来访问容器里面的元素,所以也不能通过数值来迭代集合。因此我们要通过迭代器来访问集合:

        for( TSet<int>::TIterator it = set.CreateIterator(); it; ++it ){
            GEngine->AddOnScreenDebugMessage( -1, 40.f, FColor::White, FString::FromInt( *it ) );
        }
    

     四、两个集合的操作

    1) 交集

    TSet中的Intersect函数提供了计算出两个集合的交集操作,下面是其函数声明:

    TSet Intersect( const TSet & OtherSet )

    示例:

    TSet<int> X;
    X.Add( 1 );
    X.Add( 2 );
    X.Add( 3 );
    TSet<int> Y;
    Y.Add( 2 );
    Y.Add( 3 );
    Y.Add( 4 );
    TSet<int> intersection = X.Intersect(Y); // intersection的内容为{2,3}
    

     2) 并集

    TSet中的Union函数提供了计算出两个集合的并集操作,下面是其函数声明:

    TSet Union( const TSet & OtherSet )

    示例:

    TSet<int> uni = X.Union(Y); // uni的内容为{1,2,3,4}

    容器的功能可谓非常强大的,上面只是列举其常用的一二,在官方的文档中有全面的介绍。同时我们也认识到,容器的学习也是非常简单的,只要多加练习和查询文档便可。

    感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。 博主网址:http://www.cnblogs.com/ChinacloudTech/ 独立博客:http://futuretechx.com 如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:1145356699@qq.com。 本博客为博主原创,欢迎转载,但必须注明博客来源。 更多关于游戏开发的内容也可关注微信公众号:微浪游戏
  • 相关阅读:
    (转)CTP: 平昨仓与平今仓,log轻轻告诉你.......
    linux上的语音识别程序
    6个可以隐藏运行bat,浏览器等程序的方法
    Android——用PagerAdapter实现View滑动效果
    Android——关于PagerAdapter的使用方法的总结(转)
    Android——浅谈HTTP中Get与Post的区别(转)
    Android——远程存储器存储:JDK方式和Volley框架的get和post
    android——字符串string(转)
    Android——事务
    Android——监听事件总结
  • 原文地址:https://www.cnblogs.com/ChinacloudTech/p/6384431.html
Copyright © 2011-2022 走看看