IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 带你读文档学习list容器 -> 正文阅读

[数据结构与算法]带你读文档学习list容器

一、list介绍

list是序列容器,允许在序列中的任何位置进行常数时间复杂度的插入和删除操作,以及双向迭代。

底层实现为双向链表;双向链表可以将它们包含的每个元素存储在不同且不相关的存储位置。双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。

与其他序列容器(array,vector,deque)相比,list在容器内任何位置插入、提取和移动元素的性能通常更好。

与这些其他序列容器相比,列表和 forward_list 的主要缺点是它们无法通过下标直接访问元素;例如,要访问列表中的第六个元素,必须从已知位置(如开头或结尾)迭代到该位置,这会花费线性时间。它们还消耗一些额外的内存来保持与每个元素相关联的链接信息(这对于小型元素的大型列表可能是一个重要因素)。

二、list常用接口

1.构造list相关接口

文档中的例子十分精干:
在这里插入图片描述

2.迭代器相关接口

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
begin返回第一个元素的迭代器
end返回最后一个元素的下个位置的迭代器,即头结点的迭代器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
rbegin 返回最后一个元素的迭代器
rend 返回第一个元素的前一个位置的迭代器,即头结点的迭代器

正向迭代器++,向后移动,反向迭代器++,向前移动

3.容量相关接口

在这里插入图片描述

在这里插入图片描述

4.取值相关接口

在这里插入图片描述
返回list的第一个节点中值的引用

在这里插入图片描述
返回list的最后一个节点中值的引用

5.增删改相关接口

在这里插入图片描述
各接口的参数格式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
交换两list对象的内容,交换时候其实改变指针指向就可以达到目的,代价不大。

三、list的迭代器失效问题

在list中进行插入是不会导致list的迭代器失效的,只有在删除时迭代器才会失效。

void TestListIterator1()
{
   int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
   list<int> l(array, array+sizeof(array)/sizeof(array[0]));
   auto it = l.begin();
   while (it != l.end())
   {
     // erase()函数执行后,it所指向的节点已被删除,因此it无效
     //在下一次使用it时,必须先给其赋值
     l.erase(it); 
     ++it;
   }
}
// 改正
void TestListIterator()
{
  int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
  list<int> l(array, array+sizeof(array)/sizeof(array[0]));
  auto it = l.begin();
  while (it != l.end())
  {
     l.erase(it++); 
  }
}
l.erase(it++); 

也可以写作

it = l.erase(it);  //erase的返回值是删除位置下一个位置的迭代器
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:50:37  更:2022-02-28 15:53:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:45:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码