本篇介绍C++11 STL(Standard Template Library)标准模板库中 的<list>

STL是一些“容器”的集合,包括如:list,vector,set,map等。

STL也是算法和一些组件的集合。

STL的目的:标准化组件,不用重发开发,可以使用现成的组件!

STL是C++的一部分,它的版本很多,我们只说标准C++中的STL。

C++标准中,STL被组织成为17个头文件。

<algorithm>、<deque>、<functional>、<iterator>、<array>、<vector>、<list>、<forward_list>、<map>、<unordered_map>、<memory>、<numeric>、<queue>、<set>、<unordered_set>、<stack>、<utility>。

STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。


容器:

1、序列式容器

向量(vector) 连续存储的元素 <vector>
列表(list) 由节点组成的双向链表,每个结点包含着一个元素 <list>
双端队列(deque) 连续存储的指向不同元素的指针所组成的数组 <deque>
2. 容器适配器 【由简单容器组合而成的容器】
(stack) 后进先出的值的排列  <stack>
队列(queue) 先进先出的值的排列  <queue>
优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列 <queue>
3、关联式容器 
集合(set) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序 <set>
多重集合(multiset) 允许存在两个次序相等的元素的集合 <set>
映射(map) 由{键,值}对组成的集合,以某种作用于键对上的谓词排列 <map>
多重映射(multimap) 允许键对有相等的次序的映射 <map>


迭代器:

<utility>   <iterator>  <memory>

算法:

<algorithm>,<numeric>和<functional>

比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等


std::list 是双向链表:不足之处是随机访问速度差!好处是可以快速的插入删除。

包含的方法大致如下

assign() 给list赋值 
back() 返回最后一个元素 
begin() 返回指向第一个元素的迭代器 
clear() 删除所有元素 
empty() 如果list是空的则返回true 
end() 返回末尾的迭代器 
erase() 删除一个元素 
front() 返回第一个元素 
get_allocator() 返回list的配置器 
insert() 插入一个元素到list中 
max_size() 返回list能容纳的最大元素数量 
merge() 合并两个list 
pop_back() 删除最后一个元素 
pop_front() 删除第一个元素 
push_back() 在list的末尾添加一个元素 
push_front() 在list的头部添加一个元素 
rbegin() 返回指向第一个元素的逆向迭代器 
remove() 从list删除元素 
remove_if() 按指定条件删除元素 
rend() 指向list末尾的逆向迭代器 
resize() 改变list的大小 
reverse() 把list的元素倒转 
size() 返回list中的元素个数 
sort() 给list排序 
splice() 合并两个list 
swap() 交换两个list 
unique() 删除list中重复的元素


1、前插操作

2、后插操作

3、简单的函数

4、遍历操作(顺序,逆序,排序)

上面的运行截图:

5、在第n个位置插入元素,读取第n个位置的值

6、删除第n个位置的元素值


7、查看list中是否存在某个元素,存在就删除这个元素





以上的内容几乎涵盖了std::list中所有常用操作,我觉得实用的东西几乎都包含了吧!感觉如果自己不亲自实验一遍的话,只知道STL中有这个东西,真是到用的时候,其实还得学,否则的话,根本无法方便的使用这个类。





Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐