前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >list容器[通俗易懂]

list容器[通俗易懂]

作者头像
全栈程序员站长
发布2022-07-08 16:36:23
4890
发布2022-07-08 16:36:23
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是全栈君。

双向循环链表list

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

list和vector的差别:

  1. 在list中,因为其内存分配是非连续的,因此不能像vector那样用[]操作符取值。而仅仅能用迭代器来訪问list中的元素。
  2. list中提供的成员函数与vector类似。只是list提供对表首元素的操作: push_front()、pop_front()。这是vector不具备的。

样例:

代码语言:javascript
复制
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中反复的元素

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 双向循环链表list
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档