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)中的部分内容.之所以认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单的说: ...
随机推荐
- python中一个经典的参数错误
直接上代码 class Company: def __init__(self, name, staffs=[]): self.name = name self.staffs = staffs def ...
- ValueStack与ContentMap (ActionContext.getContext().getValueStack().set())
在方法 <action name="zilei" class="dtreeAction" method="zilei"> & ...
- MySQL高级(进阶)SQL语句
MySQL高级(进阶)SQL语句 目录 MySQL高级(进阶)SQL语句 一.实例准备--制表 1. 表1(商店区域表) 2. 表2(商店销售表) 3. 表3(城市表) 4. 表4(total_sal ...
- 问题描述 ens33 不见了
事情是这样紫的 我今天用Xshell 连接Linux 发现连接不上去百思不得其解,然后就去Linux里看 ifconfig 的配置,然后发现 ens33居然不见了,就只有lo 和 virbr() , ...
- Java多线程之读写锁机制
Java多线程中有很多的锁机制,他们都有各自的应用场景,例如今天我说的这种锁机制:读写锁 读写锁,见名知意,主要可以进行两种操作,读和写操作,他们之间结合使用起来又是各不相同的.比如多个线程之间可以同 ...
- 如何写出优雅又地道的Python代码?【转载】
在Python社区文化的浇灌下,演化出了一种独特的代码风格,去指导如何正确地使用Python,这就是常说的pythonic.一般说地道(idiomatic)的python代码,就是指这份代码很pyth ...
- JVM学习——学习方法论&学习大纲
2020年02月06日22:25:51 完成了Springboot系列的学习和Kafka的学习,接下来进入JVM的学习阶段 深入理解JVM 学习方法论 如何去学习一门课程--方法论 多讨论,从别人身上 ...
- Kali Linux解压包命令:
Kali Linux解压包命令: tar.gz格式压缩包: root@kali:~# tar -xzvf 压缩包.tar.gz -C /root/home/Desktop root@kali:~# c ...
- [杂记]对RSA算法的数学原理的一点思考
- [题解]BZOJ1004 序列函数
原题找不到了,应该是usaco之类的题目吧.给一个可以交题的链接:http://www.cqoi.net:2012/problem.php?id=1004 思路:将素数一个一个往里乘,保证扫描的顺序是 ...