头文件

#include<list>

声明一个int型的list:list a;

1、list的构造函数

list<int>a{1,2,3}
list<int>a(n)    //声明一个n个元素的列表,每个元素都是0
list<int>a(n, m)  //声明一个n个元素的列表,每个元素都是m
list<int>a(first, last)  //声明一个列表,其元素的初始值来源于由区间所指定的序列中的元素,first和last是迭代器

2、begin()和end()
通过调用list容器的成员函数begin()得到一个指向容器起始位置的iterator,可以调用list容器的end()函数来得到list末端下一位置

3、push_back()和push_front()

使用list的成员函数push_back和push_front插入一个元素到list中。其中push_back()是从list的末端插入,而push_front()是从list的头部插入。

4、empty()

判断list是否为空

5、resize()

调用resize(n)将list的长度改为只容纳n个元素,超出的元素将被删除。如果n比list原来的长度长,那么默认超出的部分元素置为0。也可以用resize(n, m)的方式将超出的部分赋值为m。

例子:

list<int>b{1, 2, 3, 4};
b.resize(2);
list中输出元素:1,2
list<int>b{1, 2, 3, 4};
b.resize(6);
list中输出元素:1,2,3,4,0,0
list<int>b{1, 2, 3, 4};
b.resize(6,9);
list中输出元素:1,2,3,4,9,9

list的iterator是不支持+(- 数字)的,所以要得到那样的迭代器,必须自己编写。

6、clear()

清空list中的所有元素

7、front()和back()

通过front()可以获得list容器中的头部元素,通过back()可以获得list容器的最后一个元素。注意:当list元素为空时,这时候调用front()和back()不会报错。因此在编写程序时,最好先调用empty()函数判断list是否为空,再调用front()和back()函数。

8、pop_back()和pop_front()

使用pop_back()可以删掉尾部第一个元素,pop_front()可以删掉头部第一个元素。注意:list必须不为空,如果当list为空的时候调用pop_back()和pop_front()会使程序崩掉。

9、assign()

有两种使用情况:

(1)a.assign(n, val):将a中的所有元素替换成n个val元素

例如:

list<int>b{1,2,3,4,5};
b.assign(5,10);
b中的元素变为10, 10, 10, 10, 10

(2)a.assign(b.begin(), b.end())

list<int>a{6,7,8,9};
list<int>b{1,2,3,4,5};
b.assign(a.begin(),a.end());
b中的元素变为6,7,8,9```10、swap()交换两个链表。a.swap(b)和swap(a, b),都可以完成a链表和b链表的交换。例子:
``` C++
list<int>a{6,7,8,9};
list<int>b{1,2,3,4,5};
swap(a, b);  //或a.swap(b)

a中元素变为1,2,3,4,5
b中元素变为6,7,8,9

11、reverse()

可以实现list的逆置

例子:

list<int>b{1,2,3,4,5};
reverse(b.begin(),b.end());
b中元素变为5,4,3,2,1

12、merge()

a.merge(b) 调用结束后b变为空,a中元素包含原来a和b的元素。

例子:

list<int>a{6,7,8,9};
list<int>b{2, 1, 3, 6, 5};
a.merge(b,greater<int>());

a中元素变为:6,7,8,9,2,1,3,6,5

list<int>a{6,7,8,9};
list<int>b{2, 1, 3, 6, 5};
a.merge(b);
a中元素变为:2,1,3,6,5,6,7,8,9```13、insert()在指定位置插入一个或多个元素
``` C++
a.insert(a.begin(),100);  //在a的开始位置(即头部)插入100
a.insert(a.begin(),2, 100);   //在a的开始位置插入2个100
a.insert(a.begin(),b.begin(), b.end());//在a的开始位置插入b从开始到结束的所有位置的元素

注意:list的存储不是连续存储,所以迭代器不支持和算术数字的加减运算。所以,需要某个迭代器,只能不算地执行iterator ++或者++ iterator来获取所需要的迭代器。

14、erase()
删除一个元素或一个区域的元素

a.erase(a.begin());  //将a的第一个元素删除
a.erase(a.begin(),a.end());  //将a的从begin()到end()之间的元素删除。

15、remove()函数

从list中删除元素

list<int>a{6,7,8,9,7,10};
a.remove(7);
删除了a中所有值为7的元素,此时a中元素为6,8,9,10

16、remove_if()函数

括号中可以传入

(1)回调函数

回调函数的原型为boolisRemove(T &obj1);

函数名任意,如果obj1需要被移除则返回1,否则返回0

使用方法:list.remove_if(isRemove)

这种方法最简单,但是无法向回调函数中传递参数,每一个条件就要有一个回调函数,因此不推荐使用

(2)创建用于比较的类,传入类名及初始化参数

用于比较的类必须重载bool operator()(T &obj1)方法,如果obj1需要被移除则返回1,否则返回0.

用于比较的类还应当包含必要的构造函数,用于传递参数。

使用方法:list.remove_if(classname(args))

例1:

bool is_odd(constint& value){return (value==4);
}int main(){list<int> a{6,7,4,9,7,10};a.remove_if(is_odd);list<int>::iterator it = a.begin();while(it != a.end()){cout<<*it<< " ";it++;}return 0;
}

输出:

6 7 9 7 10

例2:

class single_digit{
public:bool operator()(const int& value){return (value<10);}
};int main(){list<int> a{6,7,4,9,7,10};a.remove_if(single_digit());list<int>::iterator it = a.begin();while(it != a.end()){cout<<*it<<" ";it++;}return 0;
}

输出:

10

C++ list用法总结相关推荐

  1. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  2. Pandas_transform的用法

    先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...

  3. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  4. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  5. python yield 和 yield from用法总结

    #例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...

  6. tf.nn.embedding_lookup()的用法

    函数: tf.nn.embedding_lookup( params, ids, partition_strategy='mod', name=None, validate_indices=True, ...

  7. OpenMP用法大全

    OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...

  8. Dorado用法与示例

    Dorado用法与示例 dorado用后总结 一.dorado概念 dorado的产品全名是"dorado展现中间件".从产品形态上dorado由两部分组成,第一部分是一个具有AJ ...

  9. TensorFlow用法

    TensorFlow用法 什么是TensorFlow TensorFlow是一个开源软件库,用于使用数据流图进行数值计算.图中的节点表示数学运算,而图的边缘表示流动的多维数据数组(张量).这种灵活的体 ...

  10. TensorFlow Keras API用法

    TensorFlow Keras API用法 Keras 是与 TensorFlow 一起使用的更高级别的作为后端的 API.添加层就像添加一行代码一样简单.在模型架构之后,使用一行代码,可以编译和拟 ...

最新文章

  1. 谷歌开源 TFGAN,让训练和评估 GAN 变得更加简单
  2. plsql生成awr报告
  3. Matlab拾零(to be continued)
  4. GIT项目管理工具(part4)--提交文件暂存记录及同步文件至本地仓库
  5. java输入键盘_java键盘输入
  6. 《Android游戏开发详解》——导读
  7. Atitit 获取ip的http标头 目录 1.1. REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP 1 1.2.  HTTP_CLIENT_IP 客户ip。握手ip 1 1.3
  8. excel怎么平滑滚动_移动平均是啥玩意?移动平均线怎么画?|Excel128
  9. matlab下载安装教程
  10. vscode 弹窗报错~/AppData\LocalPrograms\Microsavs Code\unins000.exe
  11. 百度经纬度和google经纬度互转
  12. 面试官问:“在项目中用过多线程吗?”你就把这个案例讲给他听!
  13. 2021强网杯 LongTimeAgo
  14. 世界上最有名的十大思想实验
  15. CVE-2018-6794一把梭
  16. if中return语句作用/条件判断中如何退出函数
  17. 《德川家康》完整版的下载
  18. Neo4j数据库知识图谱查询关联人物关系和cypher查询
  19. 09uni-app实战跨端云开发实战拍照识别垃圾分类精灵视频教程
  20. 章鱼网络首个应用链 Debio Network 主网正式启动

热门文章

  1. python下各种包的安装
  2. C# 对Outlook联系人的增、删、查
  3. Boost正则表达式的编译与使用方法集
  4. 转:两种转换mysql数据编码的方法-latin1转utf8
  5. 可爱妈妈对我的\情色\教育
  6. js实现贪吃蛇小游戏
  7. vue依赖缓存_Vue SSR服务端渲染之数据缓存
  8. 为什么学Python
  9. 排序算法 —— 冒泡排序
  10. Circular Sequence UVA - 1584