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容器详解的更多相关文章

  1. C++ STL bitset 容器详解

    C++ STL bitset 容器详解 本篇随笔讲解\(C++STL\)中\(bitset\)容器的用法及常见使用技巧. \(bitset\)容器概论 \(bitset\)容器其实就是个\(01\)串 ...

  2. 2.3 C++STL vector容器详解

    文章目录 2.3.1 引入 2.3.2 代码实例 2.3.3 运行结果 总结 2.3.1 引入 vector 容器 动态数组 可变数组 vector容器 单口容器(尾部操作效率高) vector动态增 ...

  3. 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. ...

  4. 2.4 C++STL deque容器详解

    文章目录 2.4.1 引入 2.4.2 代码示例 2.4.3 代码运行结果 2.4.4 具体案例 总结 2.4.1 引入 deque容器类比vector容器来学习. deque为双向开口容器,见下图. ...

  5. STL bind1st bind2nd详解

    STL bind1st bind2nd详解   先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ...

  6. [Spring学习笔记 1 ] Spring 简介,初步知识--Ioc容器详解 基本原理。

    一.Spring Ioc容器详解(1) 20131105 1.一切都是Bean Bean可是一个字符串或者是数字,一般是一些业务组件. 粒度一般比较粗. 2.Bean的名称 xml配置文件中,id属性 ...

  7. 跟我一起学STL(2)——vector容器详解

    一.引言 在上一个专题中,我们介绍了STL中的六大组件,其中容器组件是大多数人经常使用的,因为STL容器是把运用最广的数据结构实现出来,所以我们写应用程序时运用的比较多.然而容器又可以序列式容器和关联 ...

  8. list容器详解

    首先说说STL ( STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件.STL现在是C++的一部分,因此不用额外安装什么.它被内建在你的编译器之内.因为STL的list是一个简单的容器, ...

  9. STL之vector容器详解

    vector 容器 vector是C++标准模版库(STL,Standard Template Library)中的部分内容.之所以认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单的说: ...

随机推荐

  1. Docker-Compose 容器集群的编排

    Docker-Compose 容器集群的编排 1.Docker-Compose 概述 2.Docker Compose 环境安装 Docker-Compose功能:  可以实现单机上的容器集群编排 1 ...

  2. 2021羊城杯比赛复现(Crypto)

    bigrsa 题目: from Crypto.Util.number import * from flag import * n1 = 10383529640908175186077053551474 ...

  3. spring5+Struts2+hibernate5

    一,加jar包 加入顺序,个人推荐,spring->struts2->hibernate spring的jar包:基本包共21个+用到的aspectj注解的包2个+日志包1个 ------ ...

  4. spring mvc通过客户端传值,controller获取Sort对象

    之前客户端需要根据需求按不同的排序方式查看数据,按照一种约定排序,比如1代表时间升序,2代表时间降序,3,4这种形式,然后后台根据这些值创建Sort对象. 后来发现完全多此一举,可以根据特定的方式,直 ...

  5. PyCharm编程软件详细安装教程

    PyCharm编程软件安装教程&破解 一.官网下载软件 1. 网页搜索进入PyCharm官网下载页面(https://www.jetbrains.com/pycharm/download/ ) ...

  6. rsync 与 inotify 的使用 & 实现实时同步备份

    今日内容 rsync 内容详细 上一篇内容问题 1.yum源问题 2.VPN链接正常,但是没办法通过172 3.VPN链接时,出现了DNS错误 4.掩码不对 5.openvpn开启错误 复制的命令 1 ...

  7. Solution -「HNOI 2007」「洛谷 P3185」分裂游戏

    \(\mathcal{Description}\)   Link.   给定 \(n\) 堆石子,数量为 \(\{a_n\}\),双人博弈,每轮操作选定 \(i<j\le k\),使 \(a_i ...

  8. c++ istream_iterator ostream_iterator

    istream_iterator/ostream_iterator void stream_iter_odd_even(const string &in_file, const string ...

  9. Spring 控制反转和依赖注入

    控制反转的类型 控制反转(IOC)旨在提供一种更简单的机制,来设置组件的依赖项,并在整个生命周期管理这些依赖项.通常,控制反转可以分成两种子类型:依赖注入(DI)和依赖查找(DL),这些子类型各自又可 ...

  10. nginx加大缓存

    http { server { listen 0.0.0.0:81; server_name localhost; -- proxy_buffer_size 128k; proxy_buffers 3 ...