聊聊 std: list 的iterator 吧,该怎么处理

聊聊 std:: list 的iterator 吧
在公司遗留代码中,从没有遇到std库的使用,
最近有人引入了std:: list

对list的游标的使用不是很透彻

比如list<int*  >l;

该list的iterator为 ite

l.remove(*ite)后
或l.erase(ite)

还能delete *ite?


是不是当list改变了之后, 原先获取到的游标就不应该再使用了?

------解决思路----------------------
当然不能再使用了。
list<int*  >lst;
int *pI  = *iter;
lst.erase(iter);
delete pl;

------解决思路----------------------
list::erase 不破坏现有 iterator,除了那些删除了的元素的迭代器。
其他作用在 *ite 上面的操作也不会破坏 list iterator.
------解决思路----------------------
不能。建议是使用, std::list<std::shared_ptr<int>>而不是std::list<int>, 不需要手动detete
------解决思路----------------------
建议看一下list的实现,不是很复杂。一般list删除部分数据都这样写

  std::list<int*> intPtrList;
  typedef std::list<int*>::iterator iterator;
  for (iterator it = intPtrList.begin(); it != intPtrList.end();) {
    if ( condition ) {
      delete *it;
      intPtrList.erase(it++);
    } else {
      ++it;
    }
  }

------解决思路----------------------
不懂的先看看教材吧,C++primer第四版中文版423页:

任何 insert 或 push 操作都可能导致迭代器失效。当编写循
环将元素插入到 vector 或 deque 容器中时,程序必须确保迭
代器在每次循环后都得到更新。

424页:
不要存储 end 操作返回的迭代器。添加或删除 deque 或
vector 容器内的元素都会导致存储的迭代器失效。
------解决思路----------------------
http://www.cplusplus.com