std::List使用总结

本文详细介绍了C++ STL中的List容器,它基于双向链表实现,提供高效的元素插入和移除,不支持随机访问。文章涵盖了List的构建、复制、销毁、非更易型操作、元素访问、赋值、迭代器、插入与移除,以及特殊的list函数和异常处理,强调了其在异常安全性方面的优势。
摘要由CSDN通过智能技术生成

List

  List使用一个doubly linked list(双向串列)管理元素,按惯例,C++标准库并未明定实现方式,只是遵守list的名称、限制和规格。List其实相当于数据结构中的双链表。
在这里插入图片描述
  使用list时必须先包含头文件

#include<list>

  其中的list类型定义于namespace std 中,是一个class template:

template<
    class T,
    class Allocator = std::allocator<T>
> class list;

  List的元素可以是任何类型T,Allocator用于指定内存模型,默认是C++ 标准库提供的类型。

List 的能力

  List的内部结构与vector和deque完全不同,List对象提供了两个pointer,分别指向前后元素。因此,List在几个方面与vector和deuqe不同:
  1.List不支持随机访问,因此访问元素的效率较低;
  2.任何位置上,执行元素的插入和移除都很快,始终是常量时间内完成,因为无需移动任何元素;
  3.安插和删除的操作不会因此指向其他元素的pointer、reference、iterator失效;
  4.List对异常的控制是,要么操作成功,要么什么都不发生。

List 操作

  List容器提供的一般STL所具备的通用能力,但相比于vector和deque具有如下不同——
  1.由于不支持随机访问,所以List没有at函数和下标操作符;
  2.List并未提供容量、空间重新分配等操作的函数,因为没有必要,每个元素有自己的内存,在元素被删除前一直有效;
  3.List提供不少特殊成员函数,专门用于移动和移除元素,较之同名的STL通用算法,这些函数执行起来更加迅速,因为他们只需要调整几个pointer即可。

构建、复制和销毁(Create、Copy and Destroy)

  List的构建、复制和销毁操作,与每一个序列式容器相同——

序号 操作 效果
1 list<Elem> c Default构造函数,产生一个list,没有任何元素
2 list<Elem>c(c2)
list<Elem>c=c2
Copy构造函数,建立c2同型list并成为c2的一份副本,该复制是深度复制
3 list<Elem>c(rv)
list<Elem>c=rv
rv是一个list右值引用,那么这里的构造函数是一个Move构造函数,建立一个新的list,取右值内容(C++11新特性)
4 list<Elem>c(n) 利用元素的默认构造函数生成一个大小为n(容量也为n)的vector
5 list<Elem>c(n,elem) 建立一个大小为n的list,并初始化为elem
6 list<Elem>c(beg,end) 建立一个list,并以迭代器所指向的区间[beg,end)作为元素值
7 list<Elem>c(initlist)
list<Elem>c=initlist
建立一个list,以初值列initlist元素为初值(C++11新特性)
8 c.~list() 销毁所有元素,释放内存

非更易型操作(Nonmodifying Operation)

  List也提供元素比较、查询大小等操作——

序号 操作 效果
1 c.empty() 容器为空返回true,不为空返回false,相当于size()==0
2 c.size() 返回当前元素的个数
3 c.max_size() 返回元素个数之最大可能量
4 c1==c2 对每个元素调用c1==c2,全部相等返回true
5 c1!=c2 只要有一个元素相等,返回true,相当于!(c1==c2)
6 c1>c2,c1>=c2,c1<c2,c1<=c2 同上,依次类推

元素访问(Element Access)

  与vector和deque不同,list没有at和下标运算符,因此只有两个直接访问元素的函数。或者使用range-based for循环遍历所有元素——

序号 操作 效果
1 c.front() 返回第一个元素(不检查是否存在第一个元素)
2 c.back() 返回最后一个元素(不检查是否存在最后一个元素)
	list<int> l {
   1,2,3,4,5,6,7,
  • 16
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值