【C++】list容器

news2024/9/27 15:34:27

1.list基本概念

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.list构造函数

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;

#include<list>
//链表list容器构造函数

//输出list链表
void printList(const list<int>& L)
{
	for (list<int>::const_iterator it = L.begin(); it != L.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl; //换行
}

void test01()
{
	//创建list容器
	list<int>L1; //默认构造

	//添加数据
	L1.push_back(10);
	L1.push_back(20);
	L1.push_back(30);
	L1.push_back(40);

	//遍历容器
	printList(L1);

	//区间方式构造
	list<int>L2(L1.begin(), L1.end());
	printList(L2);

	//拷贝构造
	list<int>L3(L2);
	printList(L3);

	//n个elem
	list<int>L4(10,1000);
	printList(L4);
}
int main() 
{ 
	test01();
	//**************************************
	system("pause");
	return 0;
} 

在这里插入图片描述

3.list赋值和交换

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;

//list容器的赋值和交互
#include<list>
//遍历list容器
void printList(const list<int>& L)
{
	for (list<int>::const_iterator it = L.begin(); it != L.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

//赋值
void test01() 
{
	//创建list容器
	list<int>L1;
	//给L1赋值
	L1.push_back(10);
	L1.push_back(20);
	L1.push_back(30);
	L1.push_back(40);
	//遍历
	printList(L1);

	list<int>L2;
	L2 = L1; //operator= 赋值
	printList(L2);

	list<int>L3;
	L3.assign(L2.begin(), L2.end()); //按区间赋值
	printList(L3);

	list<int>L4;
	L4.assign(10, 1000); //n个elem
	printList(L4);
}
//交换
void test02()
{
	//创建list容器
	list<int>L1;
	//给L1赋值
	L1.push_back(10);
	L1.push_back(20);
	L1.push_back(30);
	L1.push_back(40);
	list<int>L2;
	//给L2赋值
	L2.assign(10, 1000); //n个elem
	
	cout << "交换前:" << endl;
	printList(L1);
	printList(L2);

	L1.swap(L2); //交换
	cout << "交换后:" << endl;
	printList(L1);
	printList(L2);
}
int main() 
{ 
	test01();
	cout << endl;
	test02();
	//**************************************
	system("pause");
	return 0;
} 

在这里插入图片描述

4.list大小操作

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;

//list容器大小操作
#include <list>
void printList(const list<int>& L)
{
	for (list<int>::const_iterator it = L.begin(); it != L.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test01()
{
	list<int>L1;
	L1.push_back(10);
	L1.push_back(20);
	L1.push_back(30);
	L1.push_back(40);
	printList(L1);

	//判断L1是否为空
	if (L1.empty())
	{
		cout << "L1为空" << endl;
	}
	else
	{
		cout << "L1不为空" << endl;
		cout << "L1的大小为:" << L1.size() << endl;
	}

	//重新指定大小
	L1.resize(10);
	printList(L1);

	//默认值定为了1000
	L1.resize(15, 1000);
	printList(L1);

	L1.resize(5); //把多余的值删除
	printList(L1);
}

int main() 
{ 
	test01();

	//**************************************
	system("pause");
	return 0;
} 

在这里插入图片描述

5.list插入和删除

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;

//list容器的插入和删除
#include<list>
void printList(const list<int>& L)
{
	for (list<int>::const_iterator it = L.begin(); it != L.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test01()
{
	list<int>L1;

	//尾插
	L1.push_back(10);
	L1.push_back(20);
	L1.push_back(30);
	L1.push_back(40);
	//头插
	L1.push_front(10);
	L1.push_front(20);
	L1.push_front(30);
	//30 20 10 10 20 30 40
	printList(L1);

	//尾删
	L1.pop_back();
	//30 20 10 10 20 30
	printList(L1);
	//头删
	L1.pop_front();
	//20 10 10 20 30
	printList(L1);

	//insert插入
	L1.insert(L1.begin(), 1000);
	//1000 20 10 10 20 30
	printList(L1);

	//利用it来插入指定位置
	list<int>::iterator it = L1.begin();
	L1.insert(++it, 5, 20000);
	//1000 20000 20000 20000 20000 20000 20 10 10 20 30
	printList(L1);

	//删除
	it = L1.begin();
	L1.erase(++it);
	//1000 20000 20000 20000 20000 20 10 10 20 30
	printList(L1);

	//移除
	L1.remove(20000); //移除所有值为20000的数据
	//1000 20 10 10 20 30
	printList(L1);

	//清空
	//L1.erase(L1.begin(), L1.end()); 这种区间删除的方法也可以
	L1.clear();
	printList(L1);
}

int main() 
{ 
	test01();

	//**************************************
	system("pause");
	return 0;
} 

在这里插入图片描述

6.list数据存取

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;

//list容器的数据存取
#include<list>
void test01()
{
	list<int>L1;
	L1.push_back(10);
	L1.push_back(20);
	L1.push_back(30);

	//L1[0]; //错误 不可以用[]访问list容器中的元素
	
	//L1.at(0); //错误 不可以用.at()方式访问list容器中的元素

	//原因是list本质链表,不是用连续性空间存储数据,迭代器也是不支持随机访问的

	cout << "第一个元素为:" << L1.front() << endl;
	cout << "最后一个元素为:" << L1.back() << endl;

	//list容器的迭代器是双向迭代器,不支持随机访问的
	list<int>::iterator it = L1.begin();
	it++;
	cout << *it << endl; //输出第二个元素:20
	it--;
	cout << *it << endl; //输出第一个元素:10
	//it = it + 1; //错误 不可以跳跃访问,即使是+1
}
int main()
{ 
	test01();

	//**************************************
	system("pause");
	return 0;
} 

在这里插入图片描述

7.list反转和排序

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;

//list容器反转和排序
#include <list>

void printList(const list<int>& L)
{
	for (list<int>::const_iterator it = L.begin(); it != L.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl; //换行
}

bool myCompare(int v1, int v2)
{
	// 降序 让第一个数 > 第二个数
	return v1 > v2;
}

void test01()
{
	list<int>L;
	L.push_back(10);
	L.push_back(30);
	L.push_back(20);
	L.push_back(50);
	L.push_back(40);
	cout << "反转前:" << endl;
	//10 30 20 50 40
	printList(L);

	//反转
	L.reverse();
	cout << "反转后:" << endl;
	//40 50 20 30 10
	printList(L);

	//排序
	// sort(L.begin(), L.end()); 错误
	// 所有不支持随机访问迭代器的容器,不可以用标准算法algorithm
	// 不支持随机访问迭代器的容器,内部会提供对应一些算法
	//默认升序
	L.sort();  // 默认排序规则 从小到大 升序
	cout << "排序后:" << endl;
	printList(L);
	
	//降序
	L.sort(myCompare); // 降序,指定规则,从大到小
	printList(L);
}
int main()
{ 
	test01();

	//**************************************
	system("pause");
	return 0;
} 

在这里插入图片描述

8.排序案例

在这里插入图片描述

在这里插入图片描述

#include <iostream>
using namespace std;

//排序案例
#include <list>
#include <string>

//Person类 三国人物
class Person
{
public:
	Person(string name, int age, float height)
	{
		this->m_Name = name;
		this->m_Age = age;
		this->m_Height = height;
	}

	string m_Name;
	int m_Age;
	float m_Height;
};  //忘记加 ; 导致一直报错!! 相对于类的声明 例如: int a;

//遍历list
void printList(const list<Person>& L)
{
	for (list<Person>::const_iterator it = L.begin(); it != L.end(); it++)
	{
		cout << "姓名:" << (*it).m_Name << "\t年龄:"
			<< (*it).m_Age << "\t身高:" << it->m_Height << endl;
	}
}

//制定排序规则
bool comparePerson(Person& p1, Person& p2)
{
	//按照年龄 升序
	if (p1.m_Age == p2.m_Age)
	{
		//年龄相同 按照身高降序
		return p1.m_Height > p2.m_Height;
	}
	else
	{
		return p1.m_Age < p2.m_Age;
	}
}

void test01()
{
	list<Person>L1; // 创建容器

	//准备数据
	Person p1("刘备", 35, 175);
	Person p2("曹操", 45, 180);
	Person p3("孙权", 40, 170);
	Person p4("赵云", 25, 190);
	Person p5("张飞", 35, 160);
	Person p6("关羽", 35, 200);

	//插入数据
	L1.push_back(p1);
	L1.push_back(p2);
	L1.push_back(p3);
	L1.push_back(p4);
	L1.push_back(p5);
	L1.push_back(p6);

	cout << "排序前:" << endl;
	printList(L1);

	cout << "-------------------------" << endl;
	cout << "排序后:" << endl;
	
	//排序:
	L1.sort(comparePerson);
	printList(L1);
}

int main()
{ 
	test01();

	//**************************************
	system("pause");
	return 0;
} 

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue-6.编译器webstorm

前言 对于长期使用idea的同学&#xff0c;前端编译器可以使用webstorm 下载地址破解方式 关闭自动更新 全局内存配置&#xff08;重启后生效&#xff09; 安装插件 汉化插件&#xff08;Chinese&#xff09; Gitee&#xff08;我喜欢用Gitee&#xff0c;它比较快&#xff0…

工作流自动化:提升效率、节约成本的重要工具

在现代社会中&#xff0c;软件和技术的运用使得我们的日常活动变得更加简单和高效。然而&#xff0c;这些技术也有自身的特点和独特之处。尽管我们使用这些工具来简化工作&#xff0c;但有时仍需要一些人工干预&#xff0c;比如手动数据录入。在工作场所中&#xff0c;手动数据…

自定义Android滑块拼图验证控件

自定义Android滑块拼图验证控件 拼图认证视图默认策略工具类参考 1、继承自AppCompatImageView&#xff0c;兼容ImageView的scaleType设置&#xff0c;可设置离线/在线图片。 2、通过设置滑块模型&#xff08;透明背景的图形块&#xff09;设置滑块&#xff08;和缺省块&#x…

IDEA 运行Application时出错,命令行过长

解决方案&#xff1a; 第一步选择编辑配置&#xff1a; 第二步选择配置&#xff1a; 第三步&#xff1a;选择JAR清单

MySQL- sql语句基础

文章目录 1.select后对表进行修改&#xff08;delete&#xff09;2.函数GROUP_CONCAT()3.使用正则表达式 1.select后对表进行修改&#xff08;delete&#xff09; 报错&#xff1a;You can’t specify target table ‘Person’ for update in FROM clause 原因&#xff1a;mys…

vue3自定义样式-路由-axios拦截器

基于vue,vite和elementPlus 基于elementPlus自定义样式 history模式的路由 在根目录配置jsconfig.json&#xff0c;添加json的配置项。输入自动联想到src目录&#xff0c;是根路径的别名拦截器 如果存在多个接口地址&#xff0c;可以配置多个axios实例 数据持久化之后&#x…

网络安全--linux下Nginx安装以及docker验证标签漏洞

目录 一、Nginx安装 二、docker验证标签漏洞 一、Nginx安装 1.首先创建Nginx的目录并进入&#xff1a; mkdir /soft && mkdir /soft/nginx/cd /soft/nginx/ 2.下载Nginx的安装包&#xff0c;可以通过FTP工具上传离线环境包&#xff0c;也可通过wget命令在线获取安装包…

服务监控平台:SpringBoot Admin入门应用

前言 在日常工作中&#xff0c;我们需要有一款监控平台来帮助我们管理服务&#xff0c;监控服务是否宕机、服务运行指标&#xff08;内存、虚拟机、线程、请求等&#xff09;、监控日志、管理服务&#xff08;服务下线&#xff09;等&#xff0c;SpringBoot Admin作为一款开源…

从0搭建ECG深度学习网络

本篇博客介绍使用Python语言的深度学习网络&#xff0c;从零搭建一个ECG深度学习网络。 任务 本次入门的任务是&#xff0c;筛选出MIT-BIH数据集中注释为[‘N’, ‘A’, ‘V’, ‘L’, ‘R’]的数据作为本次数据集&#xff0c;然后按照8&#xff1a;2的比例划分为训练集&…

【QT+ffmpeg】QT+ffmpeg 环境搭建

1.qt下载地址 download.qt.io/archive/ 2. win10sdk 下载 https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/ 安装 debug工具路径 qtcreater会自动识别 调试器选择

微服务-Fegin

在之前我们两服务之间调用的时候用的是restTemplate,但是这个方式调用存在很多的问题 String url "http://userservice/user/" order.getUserId(); 代码可读性差&#xff0c;编码体验不统一参数复杂的url难以维护 所以我们大力推出我们今天的主角--Fegin Feign是…

大数据时代下的GIS:数据驱动的地理智能

在当今信息时代&#xff0c;大数据技术的飞速发展正深刻影响着各个领域&#xff0c;地理信息系统&#xff08;GIS&#xff09;作为其中之一&#xff0c;也在大数据的浪潮下展现出了新的活力和潜力。 大数据为GIS注入了强大的数据能量 过去&#xff0c;地理信息数据的收集和存储…

B站一个月内涨粉57万,情景剧再迎黑马UP主

飞瓜数据&#xff08;B站版&#xff09;【达人排行榜】-【涨粉榜】显示&#xff0c;继上次的【成长榜】第三之后&#xff0c;UP主-显眼宝-在本周登上了涨粉榜第三的位置&#xff0c;单周涨粉就超过22万。 从UP主的粉丝趋势图来看&#xff0c;自7月起UP主账号就多次出现涨粉峰值…

Sealos 国内集群正式上线,可一键运行 LLama2 中文版大模型!

2023 年 7 月 19 日&#xff0c;MetaAI 宣布开源旗下的 LLama2 大模型&#xff0c;Meta 首席科学家、图灵奖得主 Yann LeCun 在推特上表示 Meta 此举可能将改变大模型行业的竞争格局。一夜之间&#xff0c;大模型格局再次发生巨变。 不同于 LLama&#xff0c;LLama2 免费可商用…

【仿写框架之仿写Tomact】三、使用socket监听配置文件中的端口接收HTTP请求并创建线程池处理请求

文章目录 1、自定义配置文件2、使用DOM解析XML文件3、创建Tomcat启动方法&#xff08;解析配置文件、创建线程池、socket循环监听端口&#xff09; 1、自定义配置文件 首先在main文件下创建资源目录resources&#xff1a; 在resource目录下创建server.xml文件&#xff0c;并写…

第二章-自动驾驶卡车-自动驾驶卡车前装量产的要求

1、自动驾驶卡车的特点与挑战 重卡主要运行在相对封闭的高速公路&#xff0c;相较城市道路场景看似更简单。但是&#xff0c;由于重卡特有的物理特性、运行环境和商业运营要求&#xff0c;相较于乘用车的自动驾驶系统&#xff0c;重卡的自动驾驶系统对车辆的感知距离和精度、系…

【操作系统】24王道考研笔记——第一章 计算机系统概述

第一章 计算机系统概述 一、操作系统基本概念 1.1 定义 1.2 特征 并发 &#xff08;并行&#xff1a;指两个或多个事件在同一时刻同时发生&#xff09; 共享 &#xff08;并发性指计算机系统中同时存在中多个运行着的程序&#xff0c;共享性指系统中的资源可供内存中多个并…

Vue实现动态可视化

1、可视化效果&#xff1a; 水晶球环绕地球旋转&#xff1b; 2、实现 <template><div class"container"><div class"header-body"><div class"header-left"></div><div class"header-title">网…

删除了很久的备忘录怎么恢复?快速恢复误删备忘录的方法

习惯于经常使用手机来记录事情的网友&#xff0c;应该都对备忘录软件不陌生&#xff0c;因为我们可以直接在备忘录中记录心情日记、读书笔记、生活琐事以及其他重要的事情&#xff0c;这样就不用担心自己会忘记了。不过也有一些备忘录用户表示自己在整理无效备忘录时&#xff0…

gtsam使用-Pose2 SLAM

Pose2 SLAM Pose2 SLAM是一种昂进行同时定位与地图构建&#xff08;SLAM&#xff09;的一种简单方法是仅仅融合连续机器人姿态之间的相对姿态测量。这种不涉及地标的SLAM变体通常被称为 "Pose SLAM"。 %pip -q install gtbook # also installs latest gtsam pre-re…