首先要理解STL中的两大类容器:
链表容器:包括list、slist等这样基于节点的容器(动态分配内存块)和set、map、multiset、multimap等关联容器(平衡树实现)
数组容器:指的是在一块连续的内存上保存元素的连续内存容器,比如vector、deque、string
erase()方法:
iterator erase(iterator _Where); //从指定容器删除指定位置的元素,返回值是一个迭代器,指向删除元素下一个元素
iterator erase(iterator _First,iterator _Last); //从指定容器删除某段范围内的元素,返回值也表示一个迭代器,指向最后一个删除元素的下一个元素;
正确使用erase()的方式一:
std::list< int> List; std::list< int>::iterator itList; for( itList = List.begin(); itList != List.end(); ) { if( WillDelete( *itList) ) { itList = List.erase( itList); } else itList++; }
正确使用erase()的方式二:
std::list< int> List; std::list< int>::iterator itList; for( itList = List.begin(); itList != List.end(); ) { if( WillDelete( *itList) ) { List.erase( itList++); } else itList++; }
对于链表容器两种方式都可以,但是对于数组容器只能使用第一种方式,因为数组容器的erase()方法的实现会将后面的元素都逐个往前复制移动