跟著官方文檔學習UE C++ TArray容器系列 迭代 和 排序

一.首先測試下,官方案例

迭代器的方法,有點不常見。有點像個指針,迭代完還自帶break.

oid AWXTArrayActor::WXLoopArray()
{FString JoinedStr1;FString JoinedStr2;TArray<FString> StrArr = { "Hello","Baby","Fuck" };for (auto& Str : StrArr){JoinedStr1 += Str;JoinedStr1 += TEXT(" ");}// JoinedStr == "Hello Brave World of Tomorrow !"for (auto Str : StrArr){JoinedStr2 += Str;JoinedStr2 += TEXT(" ");}
}void AWXTArrayActor::WXLoopArray2()
{FString JoinedStr;TArray<FString> StrArr = { "Hello","Baby","Fuck" };for (int32 Index = 0; Index != StrArr.Num(); ++Index) //{JoinedStr += StrArr[Index];JoinedStr += TEXT(" ");}
}void AWXTArrayActor::WXLoopArray3()
{FString JoinedStr;TArray<FString> StrArr = { "Hello","Baby","Fuck" };for (auto It = StrArr.CreateConstIterator(); It; ++It)  //It指向數組的首元素,這個地址。最后指向數組后一個0,跳出循環{JoinedStr += *It;JoinedStr += TEXT(" ");}}

二. 可能導致的錯誤用法,將某個元素替換

void AWXTArrayActor::WXLoopArray_Error()
{FString JoinedStr;TArray<FString> StrArr = { "Hello","Baby","of","Fuck"};for (int32 Index = 0; Index != StrArr.Num(); ++Index) //{if (TEXT("of") == StrArr[Index]){StrArr.RemoveAt(Index);  //Remove}else{JoinedStr += StrArr[Index];JoinedStr += TEXT(" ");}}
}

注意一定要分幀執行
WebSocket通信過程去創建WebSocket,要下一幀執行。 類似WXLoopArray_Error(),容器不要在遍歷的時候去刪。

這種錯誤,是因為容器在RemoveAt的時候,已經將容器內部進行了,位置的前移這種操作。你不能默認它沒有移動。

三.解決方案

倒著迭代 ,拼接將后面的元素也拼上。

void AWXTArrayActor::WXLoopArray_Right()
{FString JoinedStr;TArray<FString> StrArr = { "Hello","Baby","of","Fuck" };for (int32 Index = StrArr.Num()-1; Index >= 0; --Index) //{if (TEXT("of") == StrArr[Index]){StrArr.RemoveAt(Index);}else{JoinedStr = StrArr[Index] + TEXT(" ")+JoinedStr;}}
}

另開一個存儲,要刪數組的下標。

void AWXTArrayActor::WXLoopArray_Right2()
{TArray<FString> StrArr = { "Hello","My","Baby","of","Fuck"};TArray<int32> RemoveIndexArray;for (int32 Index = StrArr.Num() - 1; Index >= 0 ;--Index){if (TEXT("of") == StrArr[Index]){RemoveIndexArray.Add(Index);}if (TEXT("My") == StrArr[Index]){RemoveIndexArray.Add(Index);}}for (int32 RemovedLoopIndex = 0; RemovedLoopIndex != RemoveIndexArray.Num(); ++RemovedLoopIndex){StrArr.RemoveAt(RemoveIndexArray[RemovedLoopIndex]);}
}

?四.

1.排序,先看官方文檔

2.實現測試用例

這個排序Sort 和 堆排序,不區分大小寫。每次排序都差不多一個結果。大小寫,他們是一樣的。

void AWXTArrayActor::WXSortArray_Sort()
{TArray<FString> StrArr = { "aa","AA","AB","ab","ABC","BB","VE","AA","CCCC","AD","DDDDDDDA"};StrArr.Sort();  //按字典
}void AWXTArrayActor::WXSortArray_HeapSort()
{TArray<FString> StrArr = { "aa","AA","AB","ab","ABC","BB","VE","AA","CCCC","AD","DDDDDDDA" };StrArr.HeapSort();  //按字典
}void AWXTArrayActor::WXSortArray_StableSort()  //穩定排序,有排序后的等值元素的相對順序
{TArray<FString> StrArr = { "aa","AA","AB","ab","ABC","BB","VE","AA","CCCC","AD","DDDDDDDA" };StrArr.StableSort();  //按字典
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72272.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72272.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72272.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++中的“結界”機制:作用域與變量可見性探秘

一、編程世界的“結界”概念 源自佛學的結界概念&#xff0c;在C中體現為作用域機制。程序中的每個函數都會形成獨立的作用域屏障&#xff0c;如同魔法結界般保護內部變量&#xff0c;使其與外界的同名變量互不干擾。這種機制保證了代碼模塊的獨立性和安全性&#xff0c;但當存…

3-6 WPS JS宏 工作表移動復制實例-1(工作表的拆分操作)學習筆記

************************************************************************************************************** 點擊進入 -我要自學網-國內領先的專業視頻教程學習網站 *******************************************************************************************…

Qt 對象樹詳解:從原理到運用

1. 什么是對象樹&#xff1f; 對象樹是一種基于父子關系的對象管理機制。在 Qt 中&#xff0c;所有繼承自 QObject 的類都可以參與到對象樹中。 當一個對象被設置為另一個對象的父對象時&#xff0c;子對象會被添加到父對象的內部列表中&#xff0c;形成一種樹狀結構。 Qt 提…

使用hutool將json集合對象轉化為對象

集合之間相互轉化 //List轉Json&#xff0c;maps是List類型的參數 String json JSONUtil.toJsonStr(maps); System.out.println("這是json字符串: "json);//Json轉List JSONArray objects JSONUtil.parseArray(json); List<Map> maps1 JSONUtil.toList(objec…

Qt關于平滑滾動的使用QScroller及QScrollerProperties類說明

一、觸控時代的滾動工具&#xff1a;QScroller類設計介紹 1.1 從機械滾輪到數字慣性 在觸控設備普及前&#xff0c;滾動操作如同老式打字機的滾軸&#xff0c;只能通過鼠標滾輪或滾動條進行離散式控制。QScroller的出現如同給數字界面裝上了"慣性飛輪"&#xff0c;…

JavaAPI(網絡編程)

網絡通信協議 通信協議 ?所謂通信協議&#xff0c;是指通信雙方在進行數據交換時必須遵守的規則和約定。?這些規則確保了雙方能夠有效地進行通信&#xff0c;實現信息的交換和資源共享。通信協議定義了傳輸時的數據格式、控制信息以及傳輸順序和速度等&#xff0c;確保雙方…

Java---入門基礎篇(下)---方法與數組

前言 本篇文章主要講解有關方法與數組的知識點 ,是基礎篇的一部分 , 而在下一篇文章我會講解類和對象的知識點 入門基礎篇上的鏈接給大家放在下面啦 ! Java---入門基礎篇(上)-CSDN博客 感謝大家點贊&#x1f44d;&#x1f3fb;收藏?評論?&#x1f3fb; 歡迎各位大佬指點…

Python 爬蟲 – BeautifulSoup

Python 爬蟲&#xff08;Web Scraping&#xff09;是指通過編寫 Python 程序從互聯網上自動提取信息的過程。 爬蟲的基本流程通常包括發送 HTTP 請求獲取網頁內容、解析網頁并提取數據&#xff0c;然后存儲數據。 Python 的豐富生態使其成為開發爬蟲的熱門語言&#xff0c;特…

圖像分類項目1:基于卷積神經網絡的動物圖像分類

一、選題背景及動機 在現代社會中&#xff0c;圖像分類是計算機視覺領域的一個重要任務。動物圖像分類具有廣泛的應用&#xff0c;例如生態學研究、動物保護、農業監測等。通過對動物圖像進行自動分類&#xff0c;可以幫助人們更好地了解動物種類、數量和分布情況&#xff0c;…

物聯網 智慧園區井蓋管理辦法和功能介紹

在園區內實現 智慧井蓋 的定位、內部氣體檢測和紅外監測等頂級功能&#xff0c;可以顯著提升園區的安全管理水平和運維效率。以下是智慧井蓋系統的詳細設計方案和功能實現&#xff1a; 一、系統架構 智慧井蓋系統可以分為以下層次&#xff1a; 1. 感知層 定位模塊&#xff1…

零基礎deep seek+剪映,如何制作高品質的視頻短片

以下是專為零基礎學習者設計的 剪映專業版詳細教程&#xff0b;Deep seek配合制 &#xff0c;包含從入門到精通的系統化教學&#xff0c;配合具體操作步驟與實用技巧&#xff1a; 基于DeepSeek與剪映協同制作高品質視頻短片的專業流程指南&#xff08;2025年最新實踐版&#x…

PHP:IDEA開發工具配置XDebug,斷點調試

文章目錄 一、php.ini配置二、IDEA配置 一、php.ini配置 [xdebug] zend_extension"F:\wamp64\bin\php\php7.4.0\ext\php_xdebug-2.8.0-7.4-vc15-x86_64.dll" xdebug.remote_enable on xdebug.remote_host 127.0.0.1 xdebug.remote_port 9001 xdebug.idekey"…

改進YOLOv8模型的空間注意力機制研究:RFAConv的貢獻與實現

文章目錄 1. 背景介紹2. 什么是RFAConv?3. YOLOv8中的RFAConv實現3.1 RFAConv模塊設計3.2 在YOLOv8中集成RFAConv4. 性能對比與實驗結果4.1 實驗設置4.2 實驗結果5. 模型優化與調優5.1 調整RFAConv模塊的超參數5.2 數據增強策略5.3 更深層的注意力機制5.4 混合卷積與優化計算圖…

【Java】使用jdk自帶的zip壓縮實現任意文件壓縮打包下載功能(復制即用)

前言 在實際項目中&#xff0c;我們可能會接到將文件或者資料打包壓縮導出的需求&#xff0c;例如將系統中某些生成的文件一起打包壓縮下載提供給客戶使用&#xff0c;今天提供一個jdk自帶的工具類快速實現打包壓縮的功能&#xff0c;方法我已經封裝好&#xff0c;大家如果在項…

騰訊云擴容記錄

騰訊云擴容&#xff1a; sudo yum install -y cloud-utils-growpart 安裝擴容工具 sudo file -s /dev/vda1 有數據 sudo LC_ALLen_US.UTF-8 growpart /dev/vda 1 sudo resize2fs /dev/vda1 df -Th 完畢 以下是對執行的命令的詳細解釋以及背后的原理&#xff1a; 1. 安裝 cloud…

服務流程設計和服務或端口重定向及其websocket等應用示例

服務流程設計和服務或端口重定向及其websocket等應用示例 目錄 服務或端口重定向的服務設計和websocket等應用示例 一、通用請求控制流程 1.1、入口 1.2、所有GET請求首先預檢控制單元 1.3、http請求會分別自動307重定向 1.4、所有請求首先執行跨源控制單元 1.5、然后…

PHP面試題--后端部分

本文章持續更新內容 之前沒來得及整理時間問題導致每次都得找和重新背 這次整理下也方便各位小伙伴一起更輕松的一起踏入編程之路 歡迎各位關注博主不定期更新各種高質量內容適合小白及其初級水平同學一起學習 一起成為大佬 數組函數有那些 ps&#xff1a;本題挑難的背因為…

深入了解 MySQL 中的 JSON_CONTAINS

深入了解 MySQL 中的 JSON_CONTAINS MySQL 5.7 及更高版本引入了對 JSON 數據類型的支持&#xff0c;使得在數據庫中存儲和查詢 JSON 數據成為可能。在這些新功能中&#xff0c;JSON_CONTAINS 函數是一個非常有用的工具&#xff0c;允許我們檢查一個 JSON 文檔是否包含特定的值…

git命令學習記錄

1. git reset 參數說明 git reset 是用來回退版本的&#xff0c;它可以添加三個參數&#xff0c;常用的使用格式是這樣的&#xff1a;git reset [--hard | --soft | --mixed] 版本號 一般使用git修改文件并提交需要三步&#xff0c;第一步在文本編輯器中編輯文件&#xff0c;也…

使用DeepSeek+KIMI生成高質量PPT

一、使用DeepSeek DeepSeek官網&#xff1a;DeepSeek 點擊“開始對話”&#xff0c;進入交互頁面。 在上圖中&#xff0c;輸入問題&#xff0c;即可獲取AI生成的結果。 基礎模型&#xff08;V3&#xff09;&#xff1a;通用模型&#xff08;2024.12&#xff09;&#xff0c;高…