首页 > 其他分享 >有关迭代器erase后失效的问题

有关迭代器erase后失效的问题

时间:2022-08-30 21:44:35浏览次数:57  
标签:cout 迭代 int vector erase 失效 find

序列式容器vector,deque

使用erase删除迭代器后,后面的元素的迭代器会失效。但是erase会返回下一个有效的迭代器

int main() {

        vector<int> v{ 1,2,3,4 };

        vector<int>::iterator it = find(v.begin(), v.end(), 1);

        auto it1 = v.erase(it);

        cout << *it1 << endl;

}

上面代码输出2.

   

数组形式的容器在进行erase时,会在删除前使it指向下一个位置,同时后面的数据会向前面移动一个位置

int main() {

        vector<int> v{ 1,2,3,4 };

        vector<int>::iterator it = find(v.begin(), v.end(), 1);

        v.erase(it);

        cout << *it << endl;

}

上面代码输出也为2.(可以不用新的迭代器记录!)

   

   

   

关联式容器set,map

使用erase删除迭代器后,当前元素的迭代器失效,但是后面的元素的迭代器还有效。这就需要记录下一个元素的迭代器了。

int main() {

set<int> s{ 1,2,3,4 };

        set<int>::iterator it2 = s.find(1);

        s.erase(it2++);

        cout << *it2 << endl;

}

上面代码输出2.

   

   

序列式容器list

erase会返回下一个有效的迭代器,因此可以使用vector的方法。分配的内存不是连续的,因此可以采用set的方法。

   

int main() {

list<int> l{ 1,2,3,4 };

        list<int>::iterator it3 = find(l.begin(), l.end(), 1);

        auto it4 = l.erase(it3);

        cout << *it4 << endl;

}

int main() {

        list<int> l{ 1,2,3,4 };

        list<int>::iterator it5 = find(l.begin(), l.end(), 1);

        l.erase(it5++);

        cout << *it5 << endl;

}

上面代码都输出2.

标签:cout,迭代,int,vector,erase,失效,find
From: https://www.cnblogs.com/libxing/p/16640949.html

相关文章

  • 通过迭代工具itertools.product快速得到多列表笛卡尔积(列表组合)
    1.核心代码importitertoolssubject=['我想','我要']action=['打开','关闭']target=['电视','冰箱','洗衣机']forresinitertools.product(subject,ac......
  • 0032-Rust-自实现迭代器
    环境Time2022-05-21Rust1.61.0前言说明参考:https://doc.rust-lang.org/std/iter/index.html目标接前一节,在迭代的过程中,修改每个迭代的元素。自定义类型#[der......
  • 0033-Rust-实现递归迭代
    环境Time2022-05-21Rust1.61.0前言说明参考:https://fasterthanli.me/articles/recursive-iterators-rust目标对于递归类型的结构,实现递归迭代。自定义类型str......
  • 0025-Rust-自实现迭代器
    环境Time2022-05-21Rust1.61.0前言说明参考:https://doc.rust-lang.org/std/iter/trait.IntoIterator.html目标前一节自定义了一个类型来实现迭代器,并且自定义了......
  • 0023-Rust-自实现迭代器
    环境Time2022-05-19Rust1.60.0前言说明参考:https://doc.rust-lang.org/std/iter/index.html目标针对自定义类型,实现一个迭代器。自定义类型#[derive(Default,......
  • Mysql踩过的坑 索引失效 隐式类型转换
    ##博主所在项目,2期项目是mysql5.6版本,其使用的字符集是utf8在3期项目进行开发的时候,有一部分现成的表直接拷贝过来3期项目去使用3期项目mysql版本是8.0.20 默认约......
  • 使用IntersectionObserver 实现懒加载 && 记录一个懒加载失效的原因
    先说说我实现懒加载失效的一个原因:是图片没有写高度猜想是没有给图片高度,所以底层没法进行计算容器是否出现在视图中 实现一个IntersectionObserver//配置参数请看......
  • 如何解决消息队列的延时以及过期失效问题?
    如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?面试官心理分析你看这问法,其实本质针对的场景,都是说,......
  • .NET|--Winform|--Form的Size失效 宽度不能小于132
    解决方案最近在浏览帖子的时候无意间发现,把form的MinimumSize属性设为1,1后,可以把窗口设置最小到1,1的大小,也就可以解决这个问题了。个人猜测,系统中应该有设置窗口最小宽......
  • Spring 高级 @Autowired 失效分析
    一、失效演示1、正常情况packagecom.mangoubiubiu.show.a06;importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;......