stl 迭代器失效
1、对于基于连续内存的容器,容器元素的增删,有可能会导致迭代器的失效。考虑:
int main(int argc, char* argv[]) { vector<int> intVec; intVec.push_back(1); intVec.push_back(2); intVec.push_back(3); vector<int>::iterator iter1 = intVec.begin(); vector<int>::iterator iter2 = iter1+1; vector<int>::iterator iter3 = iter1+2; int& ri = intVec[1]; int* p1 = &(*iter2); int* p2 = &ri; intVec.erase(iter1); printf("iter2[%d]\n",*iter2); printf("ri[%d]\n",ri); printf("p1[%d]\n",*p1); printf("p2[%d]\n",*p2); getchar(); }
2、通过Memory可以内存的变化,删除之前是 1 2 3 ,删除之后是2 3,删除iter1会导致迭代器iter2和ri失效。迭代器和引用,底层都是指针,删除iter1,指针的值不变,iter2和ri的取值是3。注意:Debug模式下,iter2解引用会导致 Debug Assertion Failed。
3、删除iter3,不会导致iter2和ri失效。
4、对intVec添加元素或者插入元素,导致整个内存重分配,会导致所有迭代器失效。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人