您的位置:首页 > 其它

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中反复的元素

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: