list容器
2016-01-28 19:40
169 查看
双向循环链表list
list是双向循环链表,每个元素都知道前面一个元素和后面一个元素。list和vector的差别:
在list中,因为其内存分配是非连续的,因此不能像vector那样用[]操作符取值。而仅仅能用迭代器来訪问list中的元素。
list中提供的成员函数与vector类似。只是list提供对表首元素的操作: push_front()、pop_front()。这是vector不具备的。
样例:
int data[6]={3,5,7,9,2,4};
list<int> lidata(data, data+6);
lidata.push_back(6);
...
list初始化时,申请的空间大小为6。存放下了data中的6个元素,当向lidata插入第7个元素“6”时。list申请新的节点单元,插入到list链表中,数据存放结构例如以下图所看到的:
list每次添加一个元素,不存在又一次申请内存的情况,它的成本是恒定的。
而vector每当添加关键元素的时候,都须要又一次申请新的更大的内存空间,会调用元素的自身的复制构造函数。存在构造成本。在销毁旧内存的时候,会调用析构函数。存在析构成本。所以在存储复杂类型和大量元素的情况下,list比vector更有优势!
List是一个双向链表,双链表既能够向前又能够向后链接它的元素。
List将元素按顺序储存在链表中,与向量(vector)相比, 它同意高速的插入和删除。可是随机訪问却比較慢。
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中反复的元素
相关文章推荐
- 三、Lua中require,dofile,loadfile,dostring,loadstring,loadlib,load之间的区别
- WCF IIS 服务器 500 错误 检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(转)
- 面向对象的7大基本原则
- 2.3.4Python表达式
- Set up Git serve
- python爬虫抓站的一些技巧总结
- python爬虫抓站的一些技巧总结
- Android ListView异步加载数据库图片
- 2.3.3优先级规律和特点
- Install OpenCV3.1 on Mac by brew
- 【转载】HBase基本概念和hbase shell常用命令用法
- HDU-1506-Largest Rectangle in a Histogram【思维】【dp】【好题】
- 2.3.2运算符优先级
- dede递增函数autoindex的使用
- ReactNative使用require引用模块的技巧
- so_reuseaddr & so_reuseport
- 2.2.6 行与缩进
- 2.3.1Python运算符
- 静态库framework(一)
- POJ 1364 King(差分约束)