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. UIView的常见方法

    - (void)addSubview:(UIView *)view; 添加一个子控件view - (void)removeFromSuperview; 将自己从父控件中移除 - (UIView *)v ...

  2. 剑指Offer系列_30_包含min函数的栈

    以空间换时间: package leetcode.sword_to_offfer.day01; import java.util.Stack; /** * 定义栈的数据结构,请在该类型中实现一个能够得 ...

  3. 使用haproxy的ACL实现基于文件后缀名的动静分离

    一.环境准备 二.实现proxy [root@localhost ~]# yum -y install haproxy #创建子配置 [root@localhost ~]# mkdir /etc/ha ...

  4. 带你十天轻松搞定 Go 微服务系列(九、链路追踪)

    序言 我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建 服务拆分 用户服务 产品服务 订单服务 支付服务 RPC 服务 Auth 验证 ...

  5. if循环&数据类型的内置方法(上)

    目录 if循环&数据类型的内置方法 for循环 range关键字 for+break for+continue for+else for循环的嵌套使用 数据类型的内置方法 if循环&数 ...

  6. HMS Core携手厦门大学打造AR增强现实技术

    HMS Core AR Engine团队联手厦门大学信息学院,与专业学生面对面深度交流行业发展与前沿成果.双方共同编写行业知识教材,引导学生开发AR游戏实践,为未来AR.VR人才培养培育可复制的教学模 ...

  7. Solution -「Gym 102956A」Belarusian State University

    \(\mathcal{Description}\)   Link.   给定两个不超过 \(2^n-1\) 次的多项式 \(A,B\),对于第 \(i\in[0,n)\) 个二进制位,定义任意一个二元 ...

  8. Solution -「UOJ #87」mx 的仙人掌

    \(\mathcal{Description}\)   Link.   给出含 \(n\) 个结点 \(m\) 条边的仙人掌图.\(q\) 次询问,每次询问给出一个点集 \(S\),求 \(S\) 内 ...

  9. soc AXI接口术语和特性

    AXI接口术语和特性 1.outstanding 2.interleaving 3.out-of-oder 4.写数据可以优先于写地址 5.大小端 小端:低地址数据放在总线bus的低位. 大端:低地址 ...

  10. HDFS免重启挂载新磁盘

    背景 在生产环境中,集群节点磁盘大小不同,其使用率也会不同,HDFS虽有均衡策略,但也会有数据不平衡的情况,有些节点磁盘就会被打满,然后这个节点就不健康了(Unhealthy Nodes),Yarn的 ...