c++中如何删除map中的元素_map元素安全删除技巧

直接删除,最安全:myMap.erase(key)。

要边遍历边删除,使用it++:myMap.erase(it++);
要批量删除,条件遍历:while(it->second.expired()) myMap.erase(it++);
根据经验,自己权衡一下。

腾讯ieg timi 已offer

哦,对了,是的...腾讯的IEGTIMI...2 02 2 ...后来才意识到...面试前得好好看看...他们的立场...游戏开发...挺流行...
C++里的...STL容器...说清楚...比如向量...是动态数组...内存是常数...你访问它...O(1 )...很快...但是如果你想在中间插入或删除...那就不同了...你必须移动下面的元素。
将会是... O(n)... 。
时间复杂度...你要记住...
列表...这样更方便...双向链表...内存不需要恒定...插入和删除...O(1 )...但是如果你想搜索某个位置...你必须从开头或结尾移动...O(n)...
Map和Set...都使用红黑树...平衡二叉搜索树...插入、删除和搜索...都是O(logn) hash呢table...unordered_map/unordered_set...平均是O(1 )...但最坏情况...是O(n)...当发生哈希冲突时...
迭代器失败...这一点很重要...向量插入导致扩展...所有迭代器都无效...中间插入和删除...只有修改一个才会无效...list插入和删除...一般不会无效 会发生...除非直接移除节点...Map/Set也是...除非移除节点直接...
构造函数析构函数...虚函数...不能在构造函数中使用调用虚函数...对象未完全构造...虚表未初始化...析构函数可以...但不常用...子类必须尚未被销毁...
智能指针...shared_ptr...引用计数...线程安全...但是访问对象...不是线程安全...weak_ptr...使用lock()查看对象是否还存在...避免循环引用...make_shared...内存分配...效率高...
new delete...与malloc free不同...new delete...会调用构造函数和析构函数...类型安全...malloc free...只是管理内存...对函数不调用...返回void...
对操作系统...进程和线程...必须选对一...多进程...稳定...但是通讯麻烦...多线程...共享内存...高效...但是锁...线程崩溃...可能整个进程就终止了...协程...轻线程...用户模式调整程度...切换开销小...对于高并发I/O适合...比如游戏逻辑和网络...
共享内存...创建...可以使用shmget或者mmap...失败恢复...可以使用信号量或者文件锁...mark状态...崩溃...新进程读取状态...恢复...
Linux内存CPU故障排除...工具...top htop vmstat压力...检测高使用率...分析线程...检查调用堆栈做...
在网络上...TCP UDP...你需要知道什么时候使用...TCP...可靠...重传排序...适合需要完整数据的...比如游戏状态同步...UDP...低延迟...允许丢包...适合高实时...比如FPS游戏...
TCP可靠性...三次握手...建立连接...重传确认Do...滑动窗口...流程控制...
SYN丢包...客户端超时重传...默认5 次...服务器...收不到SYN...直接忽略...无法建立连接...
算法数据结构...最短路径...Dijkstra...单源最短...A...启发式搜索...游戏寻路...
拓扑排序...任务调度...依赖分析...Kahn算法或DFS后序...
DFS BFS...DFS...递归或堆栈...查找所有解...BFS...队列...查找最短路径...
工程实践...Redis MySQL...Redis...内存数据库...高频读写...缓存...MySQL...磁盘数据库...事务复杂查询...结构化数据...
Redis 内存快照...fork 子进程...写时复制...RDB 完成...AOF增量...
Protobuf...序列化效率...二进制格式...向后兼容...
Gitrebase...合并提交...rebase 本地更改到目标分支...历史线性...
场景问题。
..比如游戏寻路...算法...曼哈顿距离...分层寻路...预处理导航网格...
高并发服务器...主线程网络I/O...工作线程池处理逻辑...无锁队列...
噢,对了...2 02 2 ...那次面试...可能还会问...实际项目经历...比如如何实现低延迟...高并发如何处理...资源管理...
我当时也很困惑...我后来准备的时候发现...要结合具体情况JD来调整重点...不能一概而论...