迭代器删除自己

迭代器删除自己

如果是 java, 迭代器删除自己, 只要简单的 iter.remove;

list<int> l;
l.push_back(1);
l.push_back(3);
l.push_back(4);

std::list<int>::iterator iter;
std::list<int>::iterator tmp_iter;
for (iter = l.begin(); iter != l.end(); iter++) {
        if (*iter == 3) {
                tmp_iter = iter;
                iter++;
                l.erase(tmp_iter);
                continue;
        }
}
for (iter = l.begin(); iter != l.end(); iter++) {
        cout << *iter << endl;
} // 1 4
时间: 2024-08-03 23:12:55

迭代器删除自己的相关文章

STL 中 使用迭代器删除元素的问题

在vector中删除,大家都知道,直接erase的话,这种写法很有问题.因为erase(iter)之后iter指针就变成野指针了,此时继续iter++就会出问题. 1 for(auto iter = v.begin(), iter!=v.end(); iter++) 2 { 3 if(iter == 3) 4 v.erase(iter); 5 } 因此vector中正确的删除的方法是: for(auto iter = v.begin(), iter!=v.end(); /*iter++*/) {

利用迭代器删除表中元素

例子:将test表中的偶数移除掉 local test = { 2, 3, 4, 8, 9, 100, 20, 13, 15, 7, 11} for i, v in ipairs( test ) do if v % 2 == 0 then table.remove(test, i) end end for i, v in ipairs( test ) do print(i .. "====" .. v) end 打印结果: 1====3 2====8 3====9 4====20 5=

【c++】map 迭代器删除示例

C++ STL中的map是非常常见的.通常我们用如下方式来遍历,并且删除map中的一些entry: map<int, int> mp; mp.insert(make_pair(1,1)); mp.insert(make_pair(2,3)); // insert some elements for (map<int, int>::iterator iter = mp.begin(); iter != mp.end(); iter++) { if (iter->first ==

使用迭代器删除 其中的一个

for (CXMLWrapperUserObj::VEC_USEROBJS::iterator itor = pVecAll.begin(); itor != pVecAll.end(); ) {   CXMLWrapperUserObj *pSingleFlowerUserObj = *itor; DressUpgradeConfigModel *pModel = new DressUpgradeConfigModel; pModel->FieldFromUserConfig(pSingleF

List的遍历和删除元素

/** * 遍历list的方法 * @param args */ public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("111"); list.add("222"); list.add("333"); list.add("222"); list.add("4

该文档举例说明了multimap的查找和删除元素的使用

该文档举例说明了multimap的查找和删除元素的使用. 其中,在使用迭代器遍历元素的时候,如果使用了删除迭代器的操作,那么需要小心迭代器失效的情况. /* 功能说明: multimap的查找和删除元素的使用举例 代码说明: 使用multimap的equal_range()方法来查找符合指定key的元素.使用erase来删除指定key的元素. 实现方式: 限制条件或者存在的问题: 无 */ #include <iostream> #include <string> #include

遍历删除List中的元素,会报错?

经常会碰到遍历集合,然后删除里面的对象报错, 纠结半天, 百度了一下,有大神说不能用for-each,  for , 只能用迭代器,真的吗?  我就删成功了呢,看代码,请大神们指正! public static void main(String[] args) { //添加 List<String> names = new ArrayList<String>(); names.add("张三"); names.add("李四"); names

集合框架之三种迭代的能否删除

一:普通for循环的删除 1 // 普通for循环,通过索引删除,删除后索引要-- 2 for (int i = 0; i < list.size(); i++) { 3 if ("d".equals(list.get(i))) { 4 list.remove(i--); 5 } 6 } 7 System.out.println(list); 二:迭代器两种遍历(删除)方式 方式一: 1 // 迭代器删除,不能用集合的删除方法,因为迭代过程中修改会发生并发修改异常 2 ListI

二、C++迭代器的两种实现方式 (Range for和C#、Java中的foreach)

一.迭代器概述 这个标题其实有点"标题党"的含义,因为C++在标准库中的实现迭代器的方式只有一种,也就是为类定义begin()和end()函数,C++11增加了range for语句,可以用来遍历迭代器中的元素.实现迭代器的第二种方式,就是用C++模拟C#和Java中的迭代器模式,并且我们可以定义出自己的foreach语句.除此之外,迭代器可能还有很多种实现的方法,各个库也会多自己的迭代器的实现有所定义,在这里只要明白迭代器的本质意义即可. 迭代器,也称作游标,是一种设计模式,我们可以