list 容器

介绍

链表是物理存储单元上非连续,非顺序的,数据结构元素的逻辑顺序是通过链表中的指针链接次序实现的。 对于任何位置上元素插入或元素的移除,list永远是常数时间(固定步骤),list容器是一个双向链表。

○ . 采用动态内存分配,不会造成内存浪费和溢出
○ . 链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素
○ . 链表灵活,但是空间和时间额外消耗较大

list容器的迭代器
○ . list容器不能像vector<>一样以普通指针作为迭代器,因为其节点不能保证在同一块连续的内存空间上。
○ . 由于list是一个双向链表,迭代器必须能够具备前移,后移的能力,所以list容器提供的是Bidirectional Itreatirs
○ . list容器的插入和删除操作都不会造成原有list迭代器的失效,而vector在插入可能造成内存空间的重新配置(复制->找更大的空间),会导致原有的迭代器全部失效。至于list元素的删除,只有被删除的元素的迭代器失效,其他迭代器不会受到影响。
○ . list容器不仅是一个双向链表,而且还是一个循环的双向链表。

操作

一些基本操作和其他容器类似

  • 头文件 list
  • remove(elem);//删除容器中所有与elem值匹配的元素。
    ○ . 在remove自定义类时候,需要对 "= ="进行重载。
  • swap(lst);//将lst与本身的元素互换。
  • reverse();//反转链表,比如lst包含1,3,5元素,运行此方法后,lst就包含5,3,1元素。
  • sort(); //list排序 所有不支持随机访问的迭代器,不可以用系统提供的算法,如果不支持用系统提供算法,那么这个类内部会提供,默认升序,降序自己设置仿函数(回调函数)在c中调用的快排算法,回调函数返回值是int,所以可以return a-b, 在c++库中回调被定义为bool型只有0和1,所以应该返回return a>b(a<b);
  • 高级排序(自定义类,可以多次比较排序)
bool mycompareper(Person &p1,Person &p2){
	if(p1.m_age == p2.m_age)
		return p1.m_height < p2.m_height;
	return p1.m_age < p2.m_age;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值