2.7 C++STL list容器详解
文章目录
2.7.1 引入
- STL list 容器,又称双向链表容器,即该容器的底层是以双向链表的形式实现的。这意味着,list 容器中的元素可以分散存储在内存空间里,而不是必须存储在一整块连续的内存空间中。
- 链表是由一系列的节点组成,结点包含两个域,一个数据域,一个指针域。
- 由于链表内存是非连续的,因此添加删除元素时间复杂度都是常数项,不需要移动元素,比数组添加删除效率高。
- 链表只有在需要的时候才分配内存。
- 链表需要额外的空间来保存节点关系(前驱后继关系)。

-
链表示意图

-
list示意图
list容器 API学习移步 C++的STL库常用API–list
2.7.2代码示例
在这里插入代码片#include<iostream>
#include<list>
#include<cstdlib>
using namespace std;
//打印函数
void printl(list<int> list1)
{
for (list<int>::iterator it = list1.begin(); it != list1.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
//初始化
void text01()
{
list<int> mlist1;
list<int>mlist2(10, 9);//十个9
list<int>mlist3(mlist2);
list<int>mlist4(mlist2.begin(), mlist2.end());
printl(mlist2);
printl(mlist4);
}
//list容器插入删除
void text02()
{
//插入
list<int> mlist;
mlist.push_back(100);
mlist.push_front(200);
mlist.insert(mlist.begin(), 300);
mlist.insert(mlist.end(), 400);
list<int>::iterator it = mlist.begin();
it++;
it++;
mlist.insert(it, 500);
mlist.insert(mlist.end(), 200);
mlist.insert(mlist.end(), 200);
//删除
mlist.pop_back();
mlist.pop_front();
//mlist.erase(mlist.begin(), mlist.end());
printl(mlist);
mlist.remove(200);//删除匹配值(重点掌握,因为之前的容器基本没有这个remove)
printl(mlist);
}
//list赋值操作
void text03()
{
list<int> mlist;
mlist.assign(10, 9);//将10个9拷贝赋值给本身
list<int>mlist2;
mlist2 = mlist;
mlist2.swap(mlist);
printl(mlist);
}
//翻转
void text04()
{
list<int> mlist;
for (int i = 0; i < 10; i++)
{
mlist.push_back(i);
}
printl(mlist);
mlist.reverse();//反转
printl(mlist);
}
//排序辅助函数
bool mycmp(int v1, int v2)
{
return v1 > v2;
}
//排序
void text05()
{
list<int> mlist;
for (int i = 0; i < 10; i++)
{
mlist.push_back(rand()%100+0);
}
printl(mlist);
mlist.sort();//排序
printl(mlist);
mlist.sort(mycmp);//大到小
printl(mlist);
//!!!这里和算法排序有区别
//算法sort 支持随机访问的容器
}
int main()
{
cout << "\ntext01:\n";
text01();
cout << "\ntext02:\n";
text02();
cout << "\ntext03:\n";
text03();
cout << "\ntext04:\n";
text04();
cout << "\ntext05:\n";
text05();
return 0;
}
2.7.3代码运行结果

总结
链表的基础功能这里几乎全部封装好了,但是经典的反转链表,去除指定元素等功能,建议先用结构体等c语言风格代码自己实现一遍。
谢谢阅读(〃’ ▽ '〃)如有纰漏欢迎指出,觉得还不错就点个赞吧。
2.7 C++STL list容器详解的更多相关文章
- C++ STL bitset 容器详解
C++ STL bitset 容器详解 本篇随笔讲解\(C++STL\)中\(bitset\)容器的用法及常见使用技巧. \(bitset\)容器概论 \(bitset\)容器其实就是个\(01\)串 ...
- 2.3 C++STL vector容器详解
文章目录 2.3.1 引入 2.3.2 代码实例 2.3.3 运行结果 总结 2.3.1 引入 vector 容器 动态数组 可变数组 vector容器 单口容器(尾部操作效率高) vector动态增 ...
- 2.2 C++STL string容器详解
文章目录 引言 2.2.1 string的特性 2.2.2 string用法理论 2.2.2.1 string构造函数 2.2.2.2 string赋值操作 2.2.2.3 string取值操作 2. ...
- 2.4 C++STL deque容器详解
文章目录 2.4.1 引入 2.4.2 代码示例 2.4.3 代码运行结果 2.4.4 具体案例 总结 2.4.1 引入 deque容器类比vector容器来学习. deque为双向开口容器,见下图. ...
- STL bind1st bind2nd详解
STL bind1st bind2nd详解 先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ...
- [Spring学习笔记 1 ] Spring 简介,初步知识--Ioc容器详解 基本原理。
一.Spring Ioc容器详解(1) 20131105 1.一切都是Bean Bean可是一个字符串或者是数字,一般是一些业务组件. 粒度一般比较粗. 2.Bean的名称 xml配置文件中,id属性 ...
- 跟我一起学STL(2)——vector容器详解
一.引言 在上一个专题中,我们介绍了STL中的六大组件,其中容器组件是大多数人经常使用的,因为STL容器是把运用最广的数据结构实现出来,所以我们写应用程序时运用的比较多.然而容器又可以序列式容器和关联 ...
- list容器详解
首先说说STL ( STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件.STL现在是C++的一部分,因此不用额外安装什么.它被内建在你的编译器之内.因为STL的list是一个简单的容器, ...
- STL之vector容器详解
vector 容器 vector是C++标准模版库(STL,Standard Template Library)中的部分内容.之所以认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单的说: ...
随机推荐
- Html 项目使用自定义字体文件问题
感谢大佬:https://zhidao.baidu.com/question/652711582735059245.html 1.首先在项目过程中新建文件夹fonts将准备好的ttf字体文件复制该文件 ...
- 【转】linux shell编程实例总结
查找当前目录中所有大于500M的文件,把这些文件名写到一个文本文件中,并统计其个数 find ./ -size +500M -type f | tee file_list | wc 在目录/tmp下找 ...
- Keepalived配置与使用(1)
介绍 Keepalived是一个基于VRRP协议来实现的WEB服务高可用方案,可以利用其来避免单点故障.一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为 ...
- 问题描述:Navicat连不上MySQL数据库
发现Navicat连不上MySQL后我首先觉得是MySQL的服务没有打开, 然后再cmd里面 启动MySQL服务 输入: net start mysql 发现没有此服务,然我网上找了一下 先初始化My ...
- linux_14
简述CGI与FASTCGI区别 编译安装基于fastcgi模式的多虚拟主机的wordpress和discuz的LAMP架构 通过loganalyzer展示数据库中的日志
- 聊一聊DTM子事务屏障功能之SQL Server版
背景 前面写了两篇如何用 C# 基于 DTM 轻松实现 SAGA 和 TCC 的分布式事务,其中有一个子事务屏障的功能,很好的处理了空补偿.悬挂.重复请求等异常问题. https://dtm.pub/ ...
- 《PHP程序员面试笔试宝典》——如何进行自我介绍?
本文摘自<PHP程序员面试笔试宝典> PHP面试技巧分享,PHP面试题,PHP宝典尽在"琉忆编程库". 自我介绍是面试中至关重要的一个步骤,很多面试官对求职者提出的第一 ...
- Solution -「CF 757F」Team Rocket Rises Again
\(\mathcal{Description}\) link. 给定 \(n\) 个点 \(m\) 条边的无向图和一个源点 \(s\).要求删除一个不同与 \(s\) 的结点 \(u\),使得 ...
- CentOS7利用yum缓存搭建本地源
CentOS7利用yum缓存搭建本地源 环境说明 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 ( ...
- Linux性能优化概述
一.Linux性能概述 性能优化是个系统工程,总是牵一发而动全身,它涉及了从程序设计.编程语言,再到系统.存储.网络等各种底层基础设施的方方面面.每一个组件都有可能出问题,而且很有可能多个组件同时出问 ...