三 序列式容器(二)list

一 list概述:

(1)list的数据结构:一个环状双向链表。

list特点:

*不支持随机存取

*任何位置上元素的安插和移除都非常快,始终是常数时间内完成。

*不提供subscript(下标)操作符,也不提供at()。

*Lists并未提供容量、空间重新分配等操作函数。

*Lists提供了不少特殊的成员函数,专门用于移动元素。


(2)list的迭代器:Bidirectional Iterators。

重要性质:任何位置的插入操作都不会造成原有的list迭代器失效;删除操作也只有“指向被删除元素”的那个迭代器失效,其它迭代器不受影响。


二 list的操作函数:

(1)生成、复制和销毁:list的生成、复制和销毁,和所有序列式容器相同。


(2)非变动性操作


(3)赋值:


(4)元素存取:

list不支持随机存取,只有front()和back()能够直接存取元素。

这些操作并不检查容器是否为空,对着空容器执行任何操作,都会导致未定义行为。


(5)迭代器相关函数:(list迭代器只是双向移动迭代器,所以凡是用到随机存取迭代器的算法(比如STL的sort算法)不能调用,不过list自己提供了sort函数)

只有迭代器才能存取list中的各个元素。



(6)元素的安插和删除(注意list特有的几个操作)

Lists提供了deques所有的功能,还增加了remove()和remove_if()算法应用于list身上的特殊版本。

安插或删除多个元素,单一调用比多次调用快。

lists成员函数remove()比remove算法的速度更快。所以,面对list,你应该调用成员函数remove(),而不是像vectors和deques那样调用STL算法。




三 slist(单向链表)

(1)使用方法:

在ubuntu上的方法如下:

包含头文件:#include<ext/slist>

使用命名空间:using namespace __gnu_cxx;


(2)slist与list的主要差别:

*slist的迭代器是Forward Iterator,list的是Bidirectional Iterator。

*slist所耗用的空间更小。


(3)slist的特点:

*插入、删除和接合(splice)操作都不会造成原有的迭代器失效。

*不提供push_back(),只提供push_front()、pop_front()和front()操作。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值