list就是链表啦,他的一个结点由两个指针域,一个数据域组成。list可以在任何位置以O(n)的复杂度插入元素,头部和尾部的插入的复杂度为O(1)。然而list也有一个致命的缺点,因为链表的空间申请是离散的,所以访问元素必须得通过迭代器来从头或者尾部遍历到要访问的元素,所以访问元素的时间复杂度是O(n)。

一、list的内存空间是不连续的

老规矩,先上代码给你们感受一下list内存的分配情况

#include<cstdio>
#include<list>
using namespace std; int main()
{
list<int > a(30);
for(int i=0;i<30;i++)
{
printf("%d\n", &a.front());
a.pop_front();
}
}

从箭头标记的地方可以看到内存直接从118多跳到了117多,然后从连续的内存中看到,一个list<int>的结点占了24个bytes,其中每个指针域8个bytes,每个int数据域占4bytes,前面也说了,一个list结点有俩指针域,一个数据域所以一共20个bytes。再根据字节对齐原则(可以参考:番外1 什么?sizeof(list<int>)竟然是24 - zju_cxl - 博客园 (cnblogs.com)),所以就是24个bytes了。

综上,list结点的内存是随机分布的,每个结点比单个数据变量占用的内存至少要多16个bytes。

下面开始正文了,我来告诉大家list什么时候用?怎么用?用的时候要注意些什么吧?

二、什么时候用

当不需要查询list中的值,或者需要频繁的在list中间插入值的时候,可以用list

三、怎么用

1.元素访问

lt.front() 查询list头元素
lt.back() 查询list尾元素
lt.begin() 生成头部迭代器
lt.end() 生成尾部迭代器

在迭代器的前面加r如lt.rbegin(),表示从右往左的迭代器,在迭代器前加c,表示用返回常量指针(可以用auto来接收,不用写那些又长又臭的std)

2.添加元素

lt.push_back() 尾部添加
lt.push_front() 头部添加
lt.insert(pos, elem) 指定位置添加
lt.insert(pos, n , elem) 指定位置添加n个值
lt.insert(pos, begin, end) 指定位置添加begin到end的值

3.删除元素

lt.pop_back() 删除list尾元素
lt.pop_front() 删除list头元素
lt.erase(begin, end) 删除指定区间的元素
lt.erase(position) 删除position位置的元素
lt.remove(elem) (所有)值为elem的就移除
lt.remove_if(bool) (所有)如果真,则移除

4.实用函数

lt.splice() 分割list
lt.sort() 排序list
lt.merge() 合并
lt.reverse() 反转

四、用的时候要注意什么?

先空着以后再填哈哈,

最详细STL(三)list的更多相关文章

  1. RMAN详细教程(三):备份脚本的组件和注释

    RMAN详细教程(一):基本命令代码 RMAN详细教程(二):备份.检查.维护.恢复 RMAN详细教程(三):备份脚本的组件和注释 RMAN详细教程(四):备份脚本实战操作 一.基本组件: 1.Ser ...

  2. 为您详细比较三个 CSS 预处理器(框架):Sass、LESS 和 Stylus

    CSS 预处理器技术已经非常的成熟,而且也涌现出了越来越多的 CSS 的预处理器框架.本文向你介绍使用最为普遍的三款 CSS 预处理器框架,分别是 Sass.Less CSS.Stylus. 首先我们 ...

  3. 详细比较三个 CSS 预处理器(框架):Sass、LESS 和 Stylus

    [大伽说]如何运维千台云服务器 »   CSS 预处理器技术已经非常的成熟,而且也涌现出了越来越多的 CSS 的预处理器框架.本文向你介绍使用最为普遍的三款 CSS 预处理器框架,分别是 Sass.L ...

  4. 转载:【Oracle 集群】RAC知识图文详细教程(三)--RAC工作原理和相关组件

    文章导航 集群概念介绍(一) ORACLE集群概念和原理(二) RAC 工作原理和相关组件(三) 缓存融合技术(四) RAC 特殊问题和实战经验(五) ORACLE 11 G版本2 RAC在LINUX ...

  5. 最详细STL(一)vector

    vector的本质还是数组,但是可以动态的增加和减少数组的容量(当数组空间内存不足时,都会执行: 分配新空间-复制元素-释放原空间),首先先讲讲vector和数组的具体区别 一.vector和数组的区 ...

  6. STL三种标准容器

    顺序性容器 vector:从后面快速的插入与删除,直接访问任何元素 deque:从前面或后面快速的插入与删除,直接访问任何元素 list: 双链表,从任何地方快速的插入与删除 关联容器 set:快速查 ...

  7. logback详细配置(三)

    转自:http://blog.csdn.net/haidage/article/details/6794540 <filter>: 过滤器,执行一个过滤器会有返回个枚举值,即DENY,NE ...

  8. 详解三种缓存过期策略LFU,FIFO,LRU(附带实现代码)

    在学操作系统的时候,就会接触到缓存调度算法,缓存页面调度算法:先分配一定的页面空间,使用页面的时候首先去查询空间是否有该页面的缓存,如果有的话直接拿出来,如果没有的话先查询,如果页面空间没有满的时候, ...

  9. 【iCore2双核心板视频教程】 AD模块(iM_AD_GP和iM_AD_SYNC)介绍及数据采集实验三

    建议设定成 “超清” 模式并 “全屏” 观看. ============================== 技术论坛:http://www.eeschool.org 博客地址:http://xiao ...

  10. 16Aspx.com源码2013年10月到2013年12月详细

    创建时间FROM: 创建时间TO:   ExtJS合同管理信息系统源码 2013-12-13   [VS2008] 源码介绍: ExtJS合同管理信息系统源码浏览器兼容:IE,Firefox,谷歌等主 ...

随机推荐

  1. AI Agent框架(LLM Agent):LLM驱动的智能体如何引领行业变革,应用探索与未来展望

    AI Agent框架(LLM Agent):LLM驱动的智能体如何引领行业变革,应用探索与未来展望 1. AI Agent(LLM Agent)介绍 1.1. 术语 Agent:"代理&qu ...

  2. SpringCloud 微服务与微服务对接心德

    导读 先简单介绍下背景,公司里的项目,有一块需要与公司里的其他项目组对接.我们这边用的注册中心Nacos,对方用的eureka,之前都是自己写接口,然后服务中引入这个接口工程,都是注册到同一个注册中心 ...

  3. uBrand | 更适合个人创业者,小公司的AI品牌创建平台

    在跟一些辞职创业的朋友聊品牌,这个问题大家不约而同地都会提到:"我不会设计也没有资金请专业的设计师,有没有低成本打造品牌的方法呢?" 正好这段时间赶上AI的风潮,从众多AI工具中刚 ...

  4. sora未来在哪里,是否改变世界?

    什么是Sora?(Solo 社区投稿) Sora在日语中是天空的意思,是一种文本到视频的扩散模型,Sora与使用文本提示创建图像的 Dall-E 非常相似,Sora 使用文本提示创建短视频.Sora ...

  5. 开源流式湖仓服务 Arctic 详解:并非另一套 Table Format

    [点击了解更多知识] 本文根据作者于 Arctic 开源发布会演讲内容整理(略有删减),系统解读 Arctic 项目研发初衷.生态定位.核心特性.性能表现及未来规划. 首先感谢大家参与我们 Arcti ...

  6. 在宝塔上配置打包好的vue3项目

    配置文件如下 server{ listen 80; server_name gongchang.365cb.cn; index index.html index.htm default.php def ...

  7. [oeasy]python0035_ 整合shell编程_循环_延迟_清屏

    ​ 整合shell编程 回忆上次内容 用\r 可以让输出位置回到行首 原位刷新时间 如果想要的是大字符效果 需要使用 figlet 但同时还希望能刷新 ​ 编辑 这可能吗? 建立脚本 我们得熟悉一下s ...

  8. [rCore学习笔记 04]安装SSH

    因为每一个老嵌入式都喜欢使用他的老windows进行开发,因此我决定使用SSH来开发rust,这样也不用在虚拟机里边再装一个vscode. 参考博客 如何在windows下使用vscode连接linu ...

  9. NAS使用

    openwrt下的samba设置 - 百度文库 (baidu.com) openwrt下 samba设置 (wjhsh.net) opkg updateopkg install shadow-user ...

  10. golang 实现的零依赖、高性能、并发 mysqldump 工具。

    mysqldump golang 中实现的零依赖.高性能.并发 mysqldump 工具. 项目地址: https://github.com/dengjiawen8955/mysqldump/blob ...