list的常用操作

news/2024/12/27 2:08:31/

list的介绍

list是序列容器,它允许在常数范围O(1)进行插入和删除在这段序列的任意位置,并且可以双向遍历

它是弥补vector容器的缺点,与vector有互补的韵味,

这里我们可以将其进行与vector进行对比

vector

(1)可以在序列内的任意位置随机访问,这样就很好的支持了二分查找,堆排序等

(2)头部和中间插入和删除的时候效率低,扩容的时候会多扩容空间,一定程度上浪费空间

list

(1)不支持在任意位置随机访问

(2)支持了在任意位置的插入和删除,并且是常数时间O(1)扩容是一个一个链接的不会存在多扩容空间

list的常见使用

list的操作有很多,这里我们只介绍一些比较常用的操作

(1)包头文件

要使用list向将头文件包上

#include<iostream>
#include<list>using namespace std;

(2)头插头删尾插尾删

list的底层是双向链表自然也就支持头插头删尾插尾删

建立list对象l后,我们就可以进行使用了

list <int> l;l.push_back(1);
l.push_back(2);
l.push_back(3);
l.push_back(4);l.push_front(0);l.pop_back();
l.pop_front();

(3)list的打印

list的遍历不能使用operator[]+下标进行遍历,其根本的物理结构不相同
list的遍历使用迭代器或则范围for进行遍历,其中范围for是编译器自动替换为迭代器iterator进行打印

list<int>::iterator it = l.begin();while (it != l.end()){cout << *it << " ";++it;}cout << endl;for (auto e : l){cout << e << " ";}cout << endl;

打印(2)中的结果如下

(4)反向打印迭代器

list的底层是双向循环列表,支持反向遍历打印

	list<int>::reverse_iterator rit = l.rbegin();while (rit != l.rend()){cout << *rit << " ";++rit;}cout << endl;

运行结果如下

(5)修改

在迭代器以及范围for中我们可以修改list中的值,如下

	list<int>::iterator it = l.begin();while (it != l.end()){*it += 1;cout << *it << " ";++it;}cout << endl;

结果如下

(6)仅打印print_list

void print_list(const list<int>& l)
{list<int>::const_iterator it = l.begin();while (it != l.end()){//*it += 1;不能更改cout << *it << " ";++it;}cout << endl;
}

这里更改的话,编译器会提示错误,原因是const类型的迭代器仅能读,不能写

结果如下

(7)赋值运算符=

	list<int> lt1;lt1.push_back(10);lt1.push_back(20);lt1.push_back(30);lt1.push_back(40);l = lt1;print_list(l);

打印结果为,可知l中的原值1,2,3被赋值为10,20,30,40

(8)查找,插入,删除

list<int> lt1;
lt1.push_back(1);
lt1.push_back(2);
lt1.push_back(3);
lt1.push_back(4);
list<int>::iterator it = find(lt1.begin(),lt1.end(),3);
if (it != lt1.end())
{lt1.insert(it, 30);lt1.erase(it);
}

结果为,这里有的时候会涉及迭代器的失效,请期待下节

(9)排序

list<int> lt1;
lt1.push_back(3);
lt1.push_back(5);
lt1.push_back(1);
lt1.push_back(6);
lt1.push_back(2);
lt1.push_back(4);print_list(lt1);lt1.sort();

结果如下

到这里我们讲解完毕

如果对您有帮助的话点一个免费的赞和收藏叭!

由于作者水平不足,如有任何错误,请读者在评论区交流!


http://www.ppmy.cn/news/1558405.html

相关文章

leetcode hot二叉树的层序遍历

102. 二叉树的层序遍历 已解答 中等 相关标签 相关企业 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09; # Definition for a binary tree node. # class TreeNode(object): # …

HIPT论文阅读

题目《Scaling Vision Transformers to Gigapixel Images via Hierarchical Self-Supervised Learning》 论文地址&#xff1a;[2206.02647] Scaling Vision Transformers to Gigapixel Images via Hierarchical Self-Supervised Learning 项目地址&#xff1a;mahmoodlab/HI…

机器学习基础 衡量模型性能指标

目录 1 前言 ​编辑1.1 错误率(Error rate)&精度(Accuracy)&误差(Error)&#xff1a; 1.2 过拟合(overfitting): 训练误差小&#xff0c;测试误差大 1.3 欠拟合(underfitting)&#xff1a;训练误差大&#xff0c;测试误差大 1.4 MSE: 1.5 RMSE: 1.6 MAE: 1.7 R-S…

钉钉自定义机器人发送群消息(加签方式、http发送)

在钉钉群里创建自定义机器人&#xff08;群设置-机器人-添加机器人&#xff09;&#xff0c;选择自定义机器人 安全设置有三种&#xff0c;本文章使用加签(secret)方式 &#xff0c;其他方式可参考官方文档&#xff1a;获取自定义机器人 Webhook 地址 - 钉钉开放平台 添加成功后…

upload-labs关卡记录3

同理&#xff0c;我们先上传一个一句话木马进行尝试&#xff0c;发现页面会刷新&#xff0c;于是看是白名单还是黑名单 看到提示&#xff1a;不允许上传.asp,.aspx,.php,.jsp后缀文件&#xff01;说明这是黑名单的类型。这里我们发现在限制里面&#xff0c;并没有说不能上传.ht…

工厂常用软件系统大全中英文全称对照表及功能介绍应用场景ERP MES WMS SCADA IOT SAP等软件系统介绍

1. ERP&#xff08;Enterprise Resource Planning&#xff09;企业资源计划&#xff1a; ○ 功能&#xff1a;整合企业的各项资源和业务流程&#xff0c;涵盖从采购、生产到销售的各个环节。包括财务管理、生产计划、采购管理、库存管理、销售管理、人力资源管理等。 ○ 应用场…

创建仓颉编程语言的第一个项目

创建仓颉编程语言的第一个项目 安装仓颉编程语言编译器第一个仓颉项目 安装仓颉编程语言编译器 安装仓颉编程语言编译器&#xff0c;是一个需要非常强的动手能力的过程——有大量的命令行操作。这不是仓颉编程语言独有的特点。现在流行的编程语言&#xff0c;比如 kotlin、jav…

江苏计算机专转本 技能Mysql知识点总结(一)

一、概述 1.使用命令行窗口链接MySQL数据库 mysql -u用户名 -p 密码 2.数据表中的一行称为 一条记录 3.SQL Server、Oracle、Mysql、DB2、SyBase&#xff0c;PostgreSQL全是关系数据库。 MongoDB、Cassandra、Neo4j全是非关系数据库。 4.E-R图 矩形&#xff1a;表示实体。菱…