Home C&C++函数库 c++ 语法 程序源码 Linux C库

std::

list::erase

公众成员函数  <list>
C++98
iterator erase (iterator position);
iterator erase (iterator first, 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 插入元素(公众成员函数)

联系我们 免责声明 关于CandCplus 网站地图