C++ Reference: Standard C++ Library reference: Containers: list: list: erase

news/2024/10/20 21:07:13/

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(或范围)有效,则函数永远不会抛出异常(无抛出保证)。
否则,它将导致未定义的行为。 


http://www.ppmy.cn/news/2706.html

相关文章

基于SSM网上商城购物系统的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

Java基础入门第三版黑马课后习题(编程部分)

第 1 章 Java 开发入门 第 2 章 Java 编程基础 1. 编写程序,计算13…99的值,要求如下&#xff1a; (1)使用循环语句实现1~99的遍历 (2)在遍历过程中,通过条件判断当前的数是否为奇数,如果是就累加,否则不加。 public class getSum { 2 public static void main(String[] ar…

vue集成ant-design-vue

因为需要集成ant-design-vue&#xff0c;所以我在老的vue项目上进行集成&#xff0c;这不集成不要紧&#xff0c;一集成项目都起不来&#xff0c;下面进行下梳理 1遇到问题&#xff1a; BrowserslistError: Unknown browser query dead 查资料得到; 1.删除package.json文件里…

【Paper】2020_离散多智能体系统的事件触发二分一致性研究_刘雨欣

文章目录第 4 章 有向符号图下离散多智能体系统的事件触发二分一致性4.3.1 示例一4.3.2 示例二系统 动态方程、控制输入及事件触发条件分别如式(2.1)、(3.1)及式(3.6)所示。 本文考虑一阶离散多智能体系统&#xff0c;第 iii 个智能体的动态方程如下: xi(k1)xi(k)ui(k)(2.1)\b…

早,每天都是一段全新的旅程

哈喽&#xff0c;大家早上好。 真的很抱歉近一年没有更新文章。不过&#xff0c;我现在准备重整旗鼓哦&#xff0c;用业余时间继续学习前后端知识。之所以用业余时间&#xff0c;是因为我已经成功入职上海联通啦&#xff0c;虽然做的工作和大学专业不太一样&#xff0c;没能成…

10万字208道Java经典面试题总结(附答案)一

11、String 类的常用方法都有那些&#xff1f; equals、length、contains、replace、split、hashcode、indexof、substring、trim、toUpperCase、toLowerCase、isEmpty等等。 12、普通类和抽象类有哪些区别&#xff1f; 抽象类不能被实例化&#xff1b; 抽象类可以有抽象方法&…

安卓期末大作业——售票APP源码和设计报告

大作业文档 项目名称&#xff1a;售票app专业&#xff1a;班级&#xff1a;学号&#xff1a;姓名&#xff1a; 目 录 目录 一、项目功能介绍3二、项目运行环境31、开发环境32、运行环境33、是否需要联网3三、项目配置文件及工程结构31、工程配置文件32、工程结构目录4四、项…

【C++笔试强训】第四天

文章目录选择题编程题选择题 #include<iostream> #include<cstdio> using namespace std; int main(){int m0123, n123;printf("%o %o\n", m, n);return 0; }程序运行后的输出结果是&#xff08;&#xff09; A 0123 0173 B 0123 173 C 123 173 D 173 1…