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

Posted 小河沟大河沟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL容器迭代器失效问题讨论相关的知识,希望对你有一定的参考价值。

有的朋友肯定会问, 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容器迭代器失效问题讨论的主要内容,如果未能解决你的问题,请参考以下文章

[C/C++]详解STL容器2--vector的功能和模拟实现(迭代器失效,memcpy拷贝问题)

[ C++ ] STL_vector -- 迭代器失效问题

STL容器读书笔记

函数返回迭代器以构造 STL 容器

c++ STL 迭代器失效问题

面试中常被问到STL迭代器失效问题