std::
list::erase
公众成员函数 <list>
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); |
删除元素
从列表容器中删除单个元素(position)或一系列元素([first,last))。
通过删除元素的数量减少了容器的大小,这些元素被销毁
与其他标准序列容器不同,list和forward_list对象被专门设计为能够在任意位置高效地插入和删除元素,
即使是在序列的中间。
☲ 参数
-
position
-
指向要从列表中删除的单个元素的迭代器。
成员类型iterator和const_iterator是指向元素的双向迭代器类型。
-
first, last
-
指定要删除列表范围的迭代器:[first,last]。例如,range包含first和last之间的所有元素,
包括first所指向的元素,但不包括last所指向的元素。
成员类型iterator和const_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
✥ 复杂度
被删除(析构)的元素数量是线性的。
☣ 迭代器的有效性
指向被函数移除元素的迭代器、指针和引用将失效。
所有其他迭代器、指针和引用保持其有效性。
⇄ 数据竞争
容器修改。
删除的元素被修改。并发地访问或修改其他元素是安全的,但迭代包含已删除元素的范围则不安全。
☂ 异常安全性
如果position(或range)是有效的,函数永远不会抛出异常(no-throw保证)。
否则,它会导致未定义的行为。
🍄 另请参阅
list::pop_back |
删除最后一个元素(公众成员函数) |
list::pop_front |
删除第一个元素(公众成员函数) |
list::remove |
按值删除元素(公众成员函数) |
list::unique |
删除重复的值(公众成员函数) |
list::insert |
插入元素(公众成员函数) |