首页 > 编程语言 >C++ list容器的使用介绍

C++ list容器的使用介绍

时间:2024-09-29 22:49:53浏览次数:10  
标签:容器 元素 list C++ 链表 节点 赋值

 前言:

list的底层结构是一个带头双向循环链表,string和vector平时我们用到的比较多,相对于string容器和vector容器,我们对于list 相对来说稍微陌生一些,通过文章的介绍和和以后使用到此容器后有遗忘的点,通过官方文档的查阅,加强对于list容器的认识。

内容摘要:

本文包含四种构造函数、赋值重载、空和大小有关的操作、获取元素的操作、正反向迭代器、插入和删除有关的操作、一些常用的函数例如swap、 clear、remove、splice、unique、merge、sort、reverse等等。

构造函数

默认构造

构造出一个没有元素的空容器

填充构造

构造出一个元素个数为n的容器,容器中每个元素都是val

范围构造

构造出一个包含从frist到last元素的容器

拷贝构造

通过将容器x进行拷贝复制,新容器中的元素和x中的元素一模一样

赋值重载

将已经构造出来的对象通过 x 进行赋值,使实例化出来的容器对象中的元素和容器x中元素相同,这里多说一嘴,赋值重载和拷贝构造函数意义还是比较像的都是将容器的值赋给一个容器对象,区别是,拷贝构造是在实例化出来容器对象时进行赋值,而赋值重载是已经实例化出来的对象通过其他容器对象进行赋值,他们赋值的时期是不同的

空和大小

list的容量和大小这个模块相对都string容器和vector容器来说接口少了好多,因为list容器在内存空间不是连续的,因此没有扩容操作,也没有容量有关的操作

计算链表的有效节点数(size)

计算的是有效节点数,并不包括头节点

判断链表是否为空(empty)

链表为空返回ture,否则返回false

控制节点大小(resize)

当n值大于size()时,通过元素val进行填充;当n<size()相当于删除数据。

获取元素

这里获取元素只有获取头元素和获取尾元素两个接口,这和链表的结构有关,原因是这两个函数的效率在链表元素的获取中是最高的,因为头结点的下一个节点的数据域就是头元素,头结点的的上一个节点的数据域就是尾元素

获取头部元素(front)

获取尾部元素(back)

迭代器

正向迭代器

反向迭代器

插入和删除

尾插(push_back)

尾删(pop_back)

头插(push_front)

头删(pop_front)

任意位置插入(insert)

任意位置删除(erase)

一些其他函数

clear

swap

remove

删除容器中所有等于val 的节点,将调用这些被删除的节点对象的析构函数,进行删除

splice

将元素从一个容器插入另一个容器中的指定位置,这里的插入和insert 是不同的,这里主动插入的容器会删除插入的节点,两个容器的大小都发生了改变。

unique

删除容器中含有多个相同元素的值,只保留相同元素的第一个,使得容器中的每个元素都唯一,这将对排序列表有一定的作用

merge

将两个已经排序好的链表通过归并排序,合并成一个有序的链表

sort

将链表中的元素进行有序排序

reverse

将链表进行反转

标签:容器,元素,list,C++,链表,节点,赋值
From: https://blog.csdn.net/2302_80475369/article/details/142637469

相关文章

  • 学习docker第二弹------基本命令[帮助启动类命令、镜像命令、容器命令]
    docker目录前言基本命令帮助启动类命令停止docker服务查看docker状态启动docker重启docker开机启动docker查看概要信息查看总体帮助文档查看命令帮助文档镜像命令查看所有的镜像-a查看镜像ID-q在仓库里面查找redis拉取镜像查看容器/镜像/数据卷所占内存删除一个镜像删......
  • C++:数据类型
    1C++  1.1什么是C++语言呢?    C++语言是面向过程编程的高级语言,同时也可以向高级语言一样面向对象编程,泛型编程;    C++语言派生自C语言,所以C++语言可以向下兼容C语言;C++相比C,扩展了面向对象编程,泛型编程;    C++语言大小写敏感,支持ANSI标准;    G++编译器......
  • C++ 函数
    定义函数实例函数声明调用函数函数参数参数的默认值Lambda函数与表达式函数是一组一起执行一个任务的语句。每个C++程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。您可以把代码划分到不同的函数中。如何划分代码到不同的函数......
  • 南沙C++信奥赛陈老师解一本通题 1922:【03NOIP普及组】乒乓球
    ​ 【题目描述】国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白11分制和21分制对选手的不......
  • C++中的多态(详细讲解)
    目录一、多态的概念1、多态的概念二、多态的定义以及实现1、多态的构成条件2、虚函数3、虚函数的重写1)虚函数重写的理解 2)虚函数重写的两个例外1.协变(基类与派生类虚函数返回值类型不同)2.析构函数的重写(基类与派生类析构函数的名字不同) 4、关键字override......
  • C++ | Leetcode C++题解之第445题两数相加II
    题目:题解:classSolution{public:ListNode*addTwoNumbers(ListNode*l1,ListNode*l2){stack<int>s1,s2;while(l1){s1.push(l1->val);l1=l1->next;}while(l2){......
  • C++ | Leetcode C++题解之第443题压缩字符串
    题目:题解:classSolution{public:intcompress(vector<char>&chars){intn=chars.size();intwrite=0,left=0;for(intread=0;read<n;read++){if(read==n-1||chars[read]!=chars[read......
  • C++实现简单的tcp协议
    Server.cpp#include<iostream>#include<winsock2.h>#include<ws2tcpip.h>#pragmacomment(lib,"ws2_32.lib")constintPORT=8888;constintBUFFER_SIZE=1024;intmain(){WSADATAwsaData;intiResult=WSAStartu......
  • Python和C++及MATLAB距离相关性生物医学样本统计量算法及数据科学
    ......
  • 南沙C++信奥赛陈老师解一本通题 1942:【08NOIP普及组】ISBN号码
    ​ 【题目描述】每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语音,例如......