
从 std 容器到 UE 容器第一天练习记录日期2026-08-20学习章节01 C 语言基础今日目标理解标准库与 STL 的关系掌握TArray/TMap/FString与std::vector/std::map/std::string的对应关系搞清数组连续内存、越界防护和链表差异今天学了什么STL 是 C 标准库的子集特指容器、迭代器、算法那套模板组件。TArray是连续内存动态数组内部有Data/ArrayNum/ArrayMax扩容时会搬移元素。TArray在 Development 构建有越界断言Shipping 构建不检查不能依赖它当防线。TMap是无序哈希映射查找平均 O(1)需要有序时用TSortedMap。FString/FName/FText用途不同运行时文本、不可变标识、本地化显示。数组访问远快于链表UE 中TDoubleLinkedList接近std::list但日常用得少。关键代码TArrayFStringNames;Names.Add(TEXT(Alice));if(Names.IsValidIndex(0)){UE_LOG(LogTemp,Warning,TEXT(%s),*Names[0]);}TMapFName,int32Kills;Kills.FindOrAdd(FName(TEXT(Rifle)))1;踩坑记录UE 字符串字面量必须用TEXT(...)否则是char不是TCHAR。TMap不保证遍历顺序不能假设按插入顺序输出。TArray扩容会让旧引用失效批量添加前先Reserve。收获与反思容器不只是 API 记忆更重要的是内存模型。理解了“连续内存 扩容搬移”之后很多性能问题和越界问题都能自己推出来。E01 类型与转换第一道 C 练习日期2026-08-20学习章节01 C 语言基础今日目标完成 E01 类型与转换练习用static_cast显式转换并观察精度丢失今天学了什么int/float/double/bool/char的转换规则float 约 7 位有效数字double 约 15-17 位整数除法7 / 2 3INT_MAX 1溢出回绕为-2147483648TruncateToInt与RoundToInt的负数边界关键代码intRoundToInt(doublevalue){intint_valuestatic_castint(value);doublefractionvalue-int_value;if(fraction0.5){returnint_value1;}elseif(fraction-0.5){returnint_value-1;}returnint_value;}踩坑记录输出多个值不能用逗号要用链式连接。负数四舍五入时-2.5要返回-3不是-2。fraction -0.5 误写为fraction -0.5文件编码混用 GBK 会引发C4819和调试异常统一 UTF-8。Debug 构建没有 PDB 时断点不触发需要/Zi和/DEBUG。收获与反思类型转换不只是语法更要关注精度、截断和边界条件。明日计划E02 引用与指针。