c++学习第十七讲---STL常用容器---list容器

list容器:

一、list基本概念:

list容器:一个双向循环链表。

注:list和vector是两个最常用的容器,各有优缺点。

二、list构造函数:

list<T> lst;                             //默认构造

list(beg, end);                       //将(beg, end)区间中的元素拷贝

list(n, elem);                         //将n个elem拷贝

list(const list& lst);                //拷贝构造

//list构造函数
void test01()
{list<int> L1;L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);list<int>L2(L1.begin(), L1.end());list<int>L3(L1);list<int>L4(10, 1000);
}

三、list赋值和交换:

assign(beg, end);                            //区间拷贝赋值

assign(n, elem);                              //n个元素拷贝赋值

list& operator=(const list& lst);        //等号重载

swap(lst);                                        //交换

//list赋值和交换
void test02()
{list<int> L1;L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);list<int>L2;L2 = L1;list<int>L3;L3.assign(L1.begin(), L1.end());list<int>L4;L4.assign(10, 1000);L1.swap(L4);
}

四、list大小操作:

empty()               //判断容器是否为空

size();                 //返回元素个数

resize(n);            //重新指定容器大小,多删少默认

resize(n, elem);  //重新指定容器大小,多删少指定

//list大小操作
void test03()
{list<int>L1;L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);if (L1.empty()){cout << "L1为空" << endl;}else{printList(L1);//10 20 30 40cout << "L1的元素个数为:" << L1.size() << endl;}L1.resize(10,2);//10 20 30 40 2 2 2 2 2 2 L1.resize(2);//10 20
}

五、list插入和删除:

注:新的迭代器:remove --- 移除,删除全部对应元素

//list插入和删除
void test04()
{list<int>L;L.push_back(10);L.push_back(20);L.push_back(30);L.push_front(100);L.push_front(200);L.push_front(300);printList(L);//300 200 100 10 20 30L.pop_back();//300 200 100 10 20L.pop_front();//200 100 10 20L.insert(L.begin(), 1000);//1000 200 100 10 20L.erase(L.begin());//200 100 10 20L.remove(100);//200 10 20L.clear();
}

六、list数据存取:

注:list是链表,并非连续线性空间存储,不支持随机访问。

front();     //返回第一个元素

back();     //返回最后一个元素

ps : list 支持迭代器  ++、-- ,但不支持 +、-(随机访问)

//list数据存取
void test05()
{list<int>L1;L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);//L[0];//报错,不可以用[]访问//L.at();//报错,不能用atcout << "第一个元素为:" << L1.front() << endl;cout << "最后一个元素为:" << L1.back() << endl;list<int>::iterator it = L1.begin();it++;//不报错it--;//it = it + 1;//报错,不支持随机访问
}

七、list反转和排序:

reverse();            //反转链表

sort();                  //链表排序,默认升序

注:如果想sort降序排列,可自己提供函数名。

//list反转和排序
bool myCompare(int v1,int v2)
{return v1 > v2;//降序排列,使v1>v2
}
void test06()
{list<int>L1;L1.push_back(20);L1.push_back(10);L1.push_back(50);L1.push_back(40);L1.push_back(30);L1.reverse();//30 40 50 10 20L1.sort();//默认升序,10 20 30 40 50L1.sort(myCompare);//自己提供比较函数,降序排列
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/478904.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣算法Algorithm竞赛模板库(codeforces-go):含了算法竞赛中常用的数据结构和算法实现,助力开发者更高效地解决问题

1.算法Algorithm竞赛模板库&#xff08;codeforces-go&#xff09; 算法竞赛模板库&#xff0c;为算法竞赛爱好者提供了一系列精心设计的算法模板。这个库包含了算法竞赛中常用的数据结构和算法实现&#xff0c;助力开发者更高效地解决问题 一个算法模板应当涵盖以下几点&…

k8s学习(RKE+k8s+rancher2.x)成长系列之简配版环境搭建(四)之Helm及cert-manager安装

安装Helm(三台都安装) 下载helm安装包并加入执行目录 tar zxf helm-v3.2.4-linux-amd64.tar.gz cd linux-amd64 cp helm /usr/bin/ helm version添加rancher稳定版仓库(三台都安装) helm repo add rancher-stable http://rancher-mirror.oss-cn-beijing.aliyuncs.com/serve…

【Kotlin】Kotlin流程控制

1 选择结构 Kotlin 中选择结构主要包含 if -else、when 语句&#xff0c;并且可以返回结果。 1.1 if-else 1.1. 条件选择 fun main() {var score 85if (score > 90) {println("优秀")} else if (score > 80) {println("良好")} else if (score &…

知识蒸馏实战代码教学二(代码实战部分)

一、上章原理回顾 具体过程&#xff1a; &#xff08;1&#xff09;首先我们要先训练出较大模型既teacher模型。&#xff08;在图中没有出现&#xff09; &#xff08;2&#xff09;再对teacher模型进行蒸馏&#xff0c;此时我们已经有一个训练好的teacher模型&#xff0c;所以…

人工智能_普通服务器CPU_安装清华开源人工智能AI大模型ChatGlm-6B_001---人工智能工作笔记0096

使用centos安装,注意安装之前,保证系统可以联网,然后执行yum update 先去更新一下系统,可以省掉很多麻烦 20240219_150031 这里我们使用centos系统吧,使用习惯了. ChatGlm首先需要一台个人计算机,或者服务器, 要的算力,训练最多,微调次之,推理需要算力最少 其实很多都支持C…

openEuler学习——mysql(第一次总结)

1、openEuler 二进制方式安装MySQL 8.0.x。 思路是先从官网获取安装包链接如下https://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz 然后解压安装修改权限&#xff0c;可以参考mysql官方网站步骤 [rootopenEuler-node1 ~]# wget -c https:…

面试redis篇-03缓存击穿

原理 缓存击穿:给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮 解决方案一:互斥锁 解决方案二:逻辑过期 提问与回答 面试官 :什么是缓存击穿 ? 怎么解决 ? 回答: 缓存击穿的意思…

【Linux 内核源码分析】虚拟内存地址空间

在现代操作系统中&#xff0c;每个进程被分配了独享的虚拟内存地址空间。这个地址空间可以视为一维线性空间&#xff0c;由多个连续的内存页组成。初始时&#xff0c;操作系统会将整个虚拟地址空间分成几个不同的区域&#xff0c;每个区域用于特定的目的。以下是一个常见的布局…

motplotlib图例案例1:通过多个legend完全控制图例显示顺序(指定按行排序 or 按列排序)

这个方法的核心&#xff0c;是手动的获得图中的handlers和labels&#xff0c;然后对它们进行切分和提取&#xff0c;最后分为几个legend进行显示。代码如下&#xff1a; 后来对下面的代码进行修改&#xff0c;通过handlers, labels get_legend_handles_labels(axs[axis])自动的…

从入门到精通全面指南助你掌握数据分析的技术与实践【第89篇—数据分析入门到精通】

从入门到精通全面指南助你掌握数据分析的技术与实践 在当今数字化时代&#xff0c;数据成为决策制定和问题解决的关键。数据分析作为一门强大的技能&#xff0c;不仅在商业领域中备受推崇&#xff0c;而且在科学研究、社会分析等多个领域也发挥着至关重要的作用。本文将带你深…

Allegro172版本如何用自带功能改变过孔网络属性操作指导

Allegro172版本如何用自带功能改变过孔网络属性操作指导 在用Allegro做PCB设计的时候,时常会需要将过孔的网络进行变更,可以将原来的过孔删除,再重新打一个,这种方法难免会繁琐一些。 当然我们可以借助skill工具来完成更换过孔网络的更改,除此之外,Allegro自带的功能完成…

Linux 常用命令100+

Linux 运维/开发/测试 常用命令100 线上查询及帮助命令(2个) 命令功能说明示例man 命令查看普通命令帮助&#xff0c;命令的词典&#xff0c;更复杂的还有info&#xff0c;但不常用。rootbrLinux ~]#man lshelp 命令查看Linux内置命令的帮助&#xff0c;比如cd命令。[rootbrL…