C++官网参考链接:https://cplusplus.com/reference/list/list/erase/
公有成员函数
<list>
std::list::erase
C++98
iterator erase (iterator position);
iterator erase (iterator first, iterator last);
C++11
iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);
删除元素
从list容器中移除单个元素(position)或元素范围([first,last))。
这通过删除元素的数量有效地减少了容器的size。
与其他标准顺序容器不同,list和forward_list对象被专门设计为在任何位置(甚至在序列中间)高效插入和删除元素。
形参
position
指向要从list中删除的单个元素的iterator。
成员类型iterator和const_iterator是指向元素的双向iterator(bidirectional iterator)类型。
first,last
在list中指定要删除的范围的iterator:[first,last)。也就是说,范围包括first和last之间的所有元素,包括first指向的元素,但不包括last指向的元素。
成员类型iterator和const_iterator是指向元素的双向iterator(bidirectional iterator)类型。
返回值
一个iterator,指向被函数调用删除的最后一个元素后面的元素。如果操作删除了序列中的最后一个元素,则此操作为容器结束(container end)。
成员类型iterator是指向元素的双向iterator(bidirectional iterator)类型。
用例
// erasing from list
#include <iostream>
#include <list>
int main ()
{
std::list<int> mylist;
std::list<int>::iterator it1,it2;
// set some values:
for (int i=1; i<10; ++i) mylist.push_back(i*10);
// 10 20 30 40 50 60 70 80 90
it1 = it2 = mylist.begin(); // ^^
advance (it2,6); // ^ ^
++it1; // ^ ^
it1 = mylist.erase (it1); // 10 30 40 50 60 70 80 90
// ^ ^
it2 = mylist.erase (it2); // 10 30 40 50 60 80 90
// ^ ^
++it1; // ^ ^
--it2; // ^ ^
mylist.erase (it1,it2); // 10 30 60 80 90
// ^
std::cout << "mylist contains:";
for (it1=mylist.begin(); it1!=mylist.end(); ++it1)
std::cout << ' ' << *it1;
std::cout << '\n';
return 0;
}
输出:
mylist contains: 10 30 60 80 90
复杂度
删除元素(销毁)的数量中的线性。
iterator的有效性
指向被函数删除的元素的iterator、指针和reference将失效。
所有其他iterator、指针和reference都保持它们的有效性。
数据竞争
完成容器的修改。
删除的元素被修改。同时访问或修改其他元素是安全的,但是迭代包含被删除元素的范围就不安全了。
异常安全
如果position(或范围)有效,则函数永远不会抛出异常(无抛出保证)。
否则,它将导致未定义的行为。