list容器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了list容器相关的知识,希望对你有一定的参考价值。

双向循环链表list

list是双向循环链表,每个元素都知道前面一个元素和后面一个元素。

list和vector的差别:

  1. 在list中,因为其内存分配是非连续的,因此不能像vector那样用[]操作符取值。而仅仅能用迭代器来訪问list中的元素
  2. 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中反复的元素

以上是关于list容器的主要内容,如果未能解决你的问题,请参考以下文章

List双向链表容器

[C/C++ -STL]list模拟实现及list迭代器底层刨析

1.Go-copy函数sort排序双向链表list操作和双向循环链表

双向循环链表操作

数据结构-内核的双向循环链表-简单实现

双向不循环链表