bycj.net
当前位置:首页 >> C++:ErAsE删除容器中元素 结果为何是这样的呢?? >>

C++:ErAsE删除容器中元素 结果为何是这样的呢??

没有这个stl是动态指针不是数组啊,你想象成链表吧其实他是把中间哪一个空间拿走然后杀掉,把后面的挂上去 ,所以你直接访问3那个位置其实已经是4了,你可以访问以下

erase()函数的功能是用来删除容器中的元素.函数原型:iterator erase(iterator where);iterator erase(iterator first,iterator last);basic_string& erase(size_type p0=0,size_type n=np);删除某个容器里的某个元素:c.erase(T);链表容器以list为例,执行container.erase(it).list::iterator it; for (it = lt.begin(); it != lt.end(); ) {if (*it % 2 == 0)lt.erase(it++);else++it;}

可以按照下面的代码进行更改:for(it=SuspectedNodes.begin();it!=SuspectedNodes.end();it++) { if(FailedNodes.count(*it)!=0){ ittmp = it;ittmp--;

iter=ilist.erase(iter);--iter;如果删除的是第一个元素,则删除后iter指向第一个元素,那么--iter就有问题了

remove了一个元素并不会使容器中的元素个数减少,所以要erase.

可以直接用下标 跟数组一样也可以用迭代器iterator遍历到指定的位置

list头文件:#include <list>using namespace std;list和vector的不同在于,vector采用的顺序存储,即vector中的元素像数组一样,一个紧挨着一个存放.所以vector可以进行随机存取.(通常情况下使用vector是最优的选择).但是每当从vector中

vector只能插入和删除尾部元素,建议用set容器,set容器默认排序并删除重复元素

for ( it = vt.begin(); it != vt.end(); ){ it = vt.erase(it);} 任何改变 vector 长度的操作都会使已存在的迭代器失效.例如,在调用 push_back 之后,就不能再信赖指向 vector 的迭代器的值了.一个原则:对vector只要做了删除或是增加动作,就要示迭

看函数定义就知道了啊,返回的值是iterator类型! 我做了个测试,发现erase操作并不改变iter的值,不论是参数传递过去的,还是返回的值!实际上vector的erase操作是删除元素本身,然后重新组织数据,生成一个新的vector! VS可能对删除后的iter解引用操作进行了保护,所以cout << *iter会出现错误!而dev c++中则不存在这样的问题!把测试代码和结果贴出来,大家就知道结果

相关文档
wwgt.net | bycj.net | xcxd.net | krfs.net | jingxinwu.net | 网站首页 | 网站地图
All rights reserved Powered by www.bycj.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com