心智圖資源庫 TMap的迴圈遍歷
UEC 中TMap的循環遍歷(主要是涉及修改原值),包含程式碼範例、 問題分析、 修改辦法等。
編輯於2024-02-01 10:23:17Il s'agit d'une carte mentale sur le système de trading de stocks de flux émotionnels des shares A. Le contenu principal comprend: le système de trading de flux émotionnel A-share, comment utiliser le logiciel TongDaxin pour effectuer le trading de flux émotionnel.
J'ai trié le contenu pertinent de l'imagination psychologique ordinaire. L'imagination est le processus psychologique dans lequel le cerveau humain traite et transforme les apparences stockées et forme une nouvelle image. Il s'agit d'une activité cognitive de haut niveau et complexe, et c'est aussi une forme particulière de processus de réflexion. L'imagination utilise principalement des informations graphiques comme objet de traitement, plutôt que des mots et des symboles. J'espère que cela vous sera utile ~
Il s'agit d'une carte mentale sur l'utilisation irrégulière des classiques, et son contenu principal comprend: les personnes, les anneaux, les lois, les objets et les machines. Fournit une référence utile pour résoudre le problème.
Il s'agit d'une carte mentale sur le système de trading de stocks de flux émotionnels des shares A. Le contenu principal comprend: le système de trading de flux émotionnel A-share, comment utiliser le logiciel TongDaxin pour effectuer le trading de flux émotionnel.
J'ai trié le contenu pertinent de l'imagination psychologique ordinaire. L'imagination est le processus psychologique dans lequel le cerveau humain traite et transforme les apparences stockées et forme une nouvelle image. Il s'agit d'une activité cognitive de haut niveau et complexe, et c'est aussi une forme particulière de processus de réflexion. L'imagination utilise principalement des informations graphiques comme objet de traitement, plutôt que des mots et des symboles. J'espère que cela vous sera utile ~
Il s'agit d'une carte mentale sur l'utilisation irrégulière des classiques, et son contenu principal comprend: les personnes, les anneaux, les lois, les objets et les machines. Fournit une référence utile pour résoudre le problème.
TMap的迴圈遍歷
程式碼範例
TMap<FVerticalCurveInfo, FVerticalCurveDatas> UVerticalCurveAlgorithm::Calculate_VerticalCurveDataMap_StartEnd( UPARAM(ref) TMap<FVerticalCurveInfo, FVerticalCurveDatas>& InVerticalCurve) { for (auto VerticalCurve : InVerticalCurve) { for (int32 i = 0; i < VerticalCurve.Value.Datas.Num(); i) { if (VerticalCurve.Value.Datas[i].PointTangencyType == EPointTangencyType::PointTangency) { VerticalCurve.Value.Datas[i].Elevation_Start = VerticalCurve.Value.Datas[i].Elevation_PointTangency - VerticalCurve.Value.Datas[i].T * VerticalCurve.Value.Datas[i].Grade; VerticalCurve.Value.Datas[i].Elevation_End = VerticalCurve.Value.Datas[i].Elevation_PointTangency VerticalCurve.Value.Datas[i].T * VerticalCurve.Value.Datas[i 1].Grade; } } } return InVerticalCurve; }
問題分析
在這段程式碼中,它的意圖是修改引用傳遞進來的參數的某些值。但是程式碼執行結果是修改失敗。
問題出在for (auto VerticalCurve : InVerticalCurve)這個循環。在這個循環中,VerticalCurve是複製出來的元素,而不是原始InVerticalCurve中的元素的引用。因此,對VerticalCurve的修改不會影響到原始InVerticalCurve中的元素。
為了實現修改引用傳遞進來的參數,可以使用範圍基於引用的循環,或使用迭代器。
修改辦法
使用基於引用的循環
TMap<FVerticalCurveInfo, FVerticalCurveDatas> UVerticalCurveAlgorithm::Calculate_VerticalCurveDataMap_StartEnd( UPARAM(ref) TMap<FVerticalCurveInfo, FVerticalCurveDatas>& InVerticalCurve) { for (auto& VerticalCurve : InVerticalCurve) { for (int32 i = 0; i < VerticalCurve.Value.Datas.Num(); i) { if (VerticalCurve.Value.Datas[i].PointTangencyType == EPointTangencyType::PointTangency) { VerticalCurve.Value.Datas[i].Elevation_Start = VerticalCurve.Value.Datas[i].Elevation_PointTangency - VerticalCurve.Value.Datas[i].T * VerticalCurve.Value.Datas[i].Grade; VerticalCurve.Value.Datas[i].Elevation_End = VerticalCurve.Value.Datas[i].Elevation_PointTangency VerticalCurve.Value.Datas[i].T * VerticalCurve.Value.Datas[i 1].Grade; } } } return InVerticalCurve; }
這裡使用auto&來確保VerticalCurve是原始InVerticalCurve中的元素的引用。而不是複製出來的值,透過這樣的方式,對VerticalCurve的修改會影響原始InVerticalCurve。
使用迭代器
TMap<FVerticalCurveInfo, FVerticalCurveDatas> UVerticalCurveAlgorithm::Calculate_VerticalCurveDataMap_StartEnd( UPARAM(ref) TMap<FVerticalCurveInfo, FVerticalCurveDatas>& InVerticalCurve) { for (auto It = InVerticalCurve.CreateIterator(); It; It) { for (int32 i = 0; i < It.Value().Datas.Num(); i) { if (It.Value().Datas[i].PointTangencyType == EPointTangencyType::PointTangency) { It.Value().Datas[i].Elevation_Start = It.Value().Datas[i].Elevation_PointTangency - It.Value().Datas[i].T * It.Value().Datas[i]. Grade; It.Value().Datas[i].Elevation_End = It.Value().Datas[i].Elevation_PointTangency It.Value().Datas[i].T * It.Value().Datas[i 1]. Grade; } } } return InVerticalCurve; }
這這個修改的範例中,使用了CreateIterator()來取得TMap的迭代器,然後在循環中使用It存取元素。透過這種方式,我們可以直接修改It.Value(),從而修改原始的InVerticalCurve