码迷,mamicode.com
首页 > 其他好文 > 详细

STL容器迭代器失效问题讨论

时间:2018-01-08 01:13:09      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:http   pre   简便   csdn   执行顺序   href   net   process   mes   

有的朋友肯定会问, m.erase(it++);就不会产生迭代器失效么? 确实不会! 为什么呢? 这样从it++说起, 为了简便起见, 我们用p++来代替吧。 看程序:

  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. int main()  
  5. {  
  6.     char szTest[] = "abcdefg";  
  7.     char *p = szTest;  
  8.   
  9.     cout << *p++ << endl;  
  10.   
  11.     return 0;  
  12. }  

        大家都知道, 结果为a.  但是, 很多人错误地以为是先执行*p, 然后执行p++, 其实, 这是个天大的误解。 大家可以查一下*和++的执行顺序, 虽然*和++的优先级相同, 但此处采取的是右结合方式, 实际上先执行的是p++, 不过, p++的返回值是原来的p, 也就是说, *p++的值还是a.     所以, 在m.erase(it++);中,it++先执行, 此时还没有erase, 程序自然不会崩溃. 当it++执行完后, 已经指向了下一个元素了, 但it++的返回值还是当前元素, 此时再删除它, 合情合理。

 

STL容器迭代器失效问题讨论

标签:http   pre   简便   csdn   执行顺序   href   net   process   mes   

原文地址:https://www.cnblogs.com/ranjiewen/p/8232914.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!