list、vector迭代器失效问题

文章探讨了在C++编程中,特别是在使用list和vector容器时迭代器失效的问题。迭代器可视为指向容器内对象的指针,当执行特定操作如删除、扩容等时,可能会导致迭代器失效。针对list,如果在for循环中删除元素,应使用erase后返回的迭代器;对于vector,删除元素后需更新迭代器。文章提供了示例代码展示了如何在list和vector中避免迭代器失效的问题。

什么是迭代器

与数组相比,迭代器是一种面向对象的广义指针,用于指向容器中或流中的对象。可以看做是一种指向数据的指针。

什么是迭代器失效

  1. 迭代器的本质就是指针,迭代器失效就是指针失效。
  2. 指针失效:指针指向的空间是非法的。
  3. 指针指向非法空间:指向了被释放的空间 或者 越界访问 。

可能导致迭代器失效的操作

因为不同的容器,迭代器不尽相同。

可以引起vector迭代器失效的相同操作不一定会导致list的迭代器失效

listvector
/扩容操作
删除操作删除操作

如何解决迭代器失效问题

list

int main()
{
   selt<int> values {1,2,3,4,5,6};
   for (auto it=values.begin();it! =values.end();)
   {
      if (3==*it)
      {
         values.erase(it++);
      }
      else
     {
         ++it;
      }
   }
   for (auto var :values)
   {
      cout<< var <<endl;
   }
   return 0;
 }

vector

int main()
{
   vector<int> values {1,2,3,4,5,6};
   for (auto iter=val.begin();it! =val.end();)
   {
      if (3==*iter)
      {
         iter=val.erase(iter);
      }
      else
     {
         ++iter;
      }
   }
   for (auto var :val)
   {
      cout<< var <<endl;
   }
   return 0;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值