c++里,delete了list容器迭代器有什么结果?

例如,E是一个类
有以下代码:
list<E*> EList;
list<E*>::iterator p, q;
p=EList.begin();
q=EList.end();
while(p!=q)
{
delete *p;
p++;
}

在这里,delete了*p,*p还存在吗,为什么delete了p之后还可以p++?
delete了list容器的迭代器后会有什么结果?
谢谢!

delete的是迭代器指向的对象,析构的是迭代器指向的对象(这是个指针)指向的对象,对迭代器没有影响,对这个指针而言只是其指向的对象被析构且该处内存被收回,指针仍然存在……追问

对象不存在,迭代器不是会变成“野指针”吗
难道该处内存被收回,指针依然指着该处内存?
否则++怎么能让p指向下一个对象?

追答

delete的是*p,关p什么事

温馨提示:内容为网友见解,仅供参考
无其他回答

使用迭代器或算法删除容器的元素 remove erase
利用迭代器进行元素删除,是C++中一个灵活且高效的手段。下面我们将详细阐述使用迭代器或算法(如find、remove、erase)删除容器元素的具体步骤与效果。删除特定值的首个元素,可以通过使用find算法实现。下面展示了一个示例代码,用于从包含{ 1,2,3,4,5,3,9,3 }的数组中删除第一个3。程序的输出结...

[C++标准程序库的问题] 在删除操作很多的情况下,应该选择什么样的容器...
按照标准程序库的说明,当删除\/插入只发生在容器的尾部时,应该使用vector;当删除\/插入只发生在容器的首\/尾部时,应该使用deque;当删除\/插入操作很多,而且删除\/插入不是只在容器的首尾,这时应该选择list。但是这里也有一个问题,在使用list时,由于其迭代器只能一次移动一个位置,在有大量删除的操作时...

c++ STL删除算法:remove()、remove_copy()、remove_if()、remove_copy...
很明显,remove_copy可修改自身容器结果,或者把结果输出到另一新容器中。remove_if函数模板的行为等效于:从前两个正向迭代器指定的序列中移除能够使作为第三个参数的谓词返回true的元素。remove_copy_if函数模板的行为等效于:将前两个正向迭代器参数指定的序列中,能够使作为第四个参数的谓词返回true的...

c++中怎么确定list 容器里的元素的位置 求高手解答 在线等答案_百度知 ...
使用find啊,list是一个链表,所以不能用下标来标识。只能通过迭代器来获取位置。两种方式,一种是调用list的find算法 list<XX>::iterator it = LIST.find(value);这里的it就是元素的位置。如果你要计数也可以,通过for循环查找,得到位置。list<XX>::iterator it = LIST.begin();int i = 0;for...

c++ 里面的erase()和insert()的问题。
set 容器可以根据想被插入的值来求得它应该放的位置, 因为它是个二叉树。但是list vector 里面的元素是无序的, 所以容器不知道被插数值的插入位置,故必须用迭代器确定插入位置。reference: http:\/\/www.cplusplus.com\/reference\/stl\/

C++一个类模板里使用迭代器的问题
编译器说的再清楚不过了 typedef list<HashedObj>::iterator Litr;'std::list<HashedObj>::iterator'前面要加'typename'指示这是一个类型的名字,因为 'std::list<HashedObj>'是dependent scope,不能自动判断其成员iterator是类型还是变量

C++ 如何删除list集合前面n条元素?
可以使用如下方法:list.erase(list.begin(), list.begin() + n)该方法比自己写循环语句效率要高,另外自己写循环语句需要注意迭代器的正确性

c++中delete的用法
"C++内存管理不同方式分析C++迭代器基本内容讲述C++浅拷贝具体内容讲述C++回调函数代码示例解读C++二维数组new几种应用方法点评 new和C++ delete运算符用于动态分配和撤销内存的运算符 new用法:1. 开辟单变量地址空间 1)new int; \/\/开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = ...

c++iterator
在C++中,我们可以通过容器的begin和end成员函数来获取迭代器。begin函数返回指向容器第一个元素的迭代器,end函数返回指向容器末尾元素的下一个位置的迭代器。通过这两个迭代器,我们可以使用循环来遍历容器中的元素。在遍历过程中,我们可以使用迭代器的操作符来访问和操作元素。四、迭代器的优势 使用迭代...

c++list容器值可以重复吗
可以。C++的list容器中的元素可以重复,list是一种双向链表的容器,允许插入相同值的元素,可以通过迭代器遍历整个容器,与别的容器(如set和map)不同,list容器没有提供自动排序的功能。

相似回答
大家正在搜