list容器[通俗易懂]

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容器[通俗易懂]

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116139.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号