【C++STL基础入门】list基本使用

文章目录

  • 前言
  • 一、list简介
    • 1.1 list是什么
    • 1.2 list的头文件
  • 二、list
    • 2.1 定义对象
    • 2.2 list构造函数
    • 2.3 list的属性函数
  • 总结


前言

STL(Standard Template Library)是C++标准库的一个重要组成部分,提供了一套丰富的数据结构和算法,可以大大简化C++程序的开发过程。其中,list容器是STL提供的一种双向链表实现的数据结构,具有高效的插入和删除操作,适用于需要频繁插入和删除元素的场景。本文将介绍list容器的基本使用方法,包括头文件的引入、定义和构造函数、属性函数以及运算符和算法的示例代码。


一、list简介

1.1 list是什么

STL(标准模板库)的list是C++中的一种数据结构,用于存储和操作链表。链表是一种动态数据结构,与数组不同,链表的元素在内存中不是连续存储的,而是通过指针连接起来。

list可以存储任意类型的数据,并提供了一系列方法来对链表进行操作,如在链表头部或尾部插入/删除元素,以及在任意位置插入/删除元素等。它还支持双向迭代器,可以方便地遍历链表的元素。

使用list的好处是,它在插入和删除元素时效率很高,因为只需要调整指针的指向即可,不需要像数组一样移动其他元素。此外,list的大小可以根据需要自由扩展,并且不会产生内存碎片。

总之,STL的list是一种用于存储和操作链表的数据结构,通过指针将元素连接起来,提供了高效的插入和删除操作,适用于需要频繁插入和删除元素的场景。

1.2 list的头文件

#include <list>

在这里插入图片描述

二、list

2.1 定义对象

list<类型> 名称;

2.2 list构造函数

无参构造函数。创建一个空的"list"对象。

示例代码:
﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp

#include <iostream>
#include <list>int main() {std::list<int> myList;  // 创建一个空的int类型链表return 0;
}

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥

在这里插入图片描述

  1. “list(size_type _Count)”: 构造具有指定元素数量的"list"对象。

参数:

  • “_Count”: 要创建的链表中元素的数量。

示例代码:
﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp

#include <iostream>
#include <list>int main() {std::list<int> myList(5);  // 创建一个包含5个默认值为0的int类型元素的链表return 0;
}

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥
在这里插入图片描述

  1. “list(size_type _Count, const Type& _Val)”: 构造具有指定元素数量和初始值的"list"对象。

参数:

  • “_Count”: 要创建的链表中元素的数量。
  • “_Val”: 初始化链表元素的值。

示例代码:
﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp

#include <iostream>
#include <list>int main() {std::list<int> myList(3, 10);  // 创建一个包含3个值为10的int类型元素的链表return 0;
}

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥
在这里插入图片描述

  1. “list(InputIterator _First, InputIterator _Last)”: 构造一个包含给定范围内元素的"list"对象。

参数:

  • “_First”: 范围的起始迭代器。
  • “_Last”: 范围的结束迭代器。

示例代码:
﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp

#include <iostream>
#include <list>
#include <vector>int main() {std::vector<int> myVector = {1, 2, 3, 4, 5};std::list<int> myList(myVector.begin(), myVector.end());  // 使用vector中的元素构造一个新的链表return 0;
}

在这里插入图片描述

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥

以上示例展示了不同构造函数的使用方法,可以根据实际需求选择适合的构造函数来创建"list"对象。

2.3 list的属性函数

  1. “size()”: 用于返回"list"中元素的数量。

示例代码:
﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp

#include <iostream>
#include <list>int main() {std::list<int> myList = {1, 2, 3, 4, 5};std::cout << "Size of myList: " << myList.size() << std::endl;  // 输出链表中元素的数量return 0;
}

在这里插入图片描述

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥

  1. “resize()”: 用于改变"list"的大小。

参数:

  • “new_size”: 新的大小。
  • “value” (可选): 可以指定一个值,用于在扩大大小时在尾部添加的新元素的初始值。

示例代码:
﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp

#include <iostream>
#include <list>int main() {std::list<int> myList = {1, 2, 3};myList.resize(5);  // 将链表的大小调整为5,默认填充0std::cout << "New size of myList: " << myList.size() << std::endl;myList.resize(8, 10);  // 将链表的大小调整为8,并在尾部填充值为10的元素std::cout << "New size of myList: " << myList.size() << std::endl;return 0;
}

在这里插入图片描述

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥

  1. “empty()”: 用于检查"list"是否为空,即判断链表中是否没有元素。

示例代码:
﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp

#include <iostream>
#include <list>int main() {std::list<int> myList;if (myList.empty()) {std::cout << "myList is empty." << std::endl;} else {std::cout << "myList is not empty." << std::endl;}return 0;
}

在这里插入图片描述

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥

以上示例展示了"size()"、"resize()"和"empty()"函数的使用方法,可以根据需求使用这些函数来获取链表的大小、调整链表的大小以及检查链表是否为空。


总结

本文介绍了C++ STL的list容器的基本使用方法。通过引入头文件、定义和构造函数、属性函数以及运算符和算法的示例代码,我们可以发现list容器的灵活性和高效性,适用于频繁插入和删除元素的场景。使用list容器可以简化C++程序的开发过程,并提高效率。

希望本文能够帮助读者理解list容器的基本使用方法,以及它在实际编程中的作用和优势。如果有任何疑问,请随时提问。

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

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

相关文章

对CU50的修改(未使用)

目的是把CU50中的选择配置拿出来&#xff0c;再把最后BOM的结果拿出来。2023.10.13 一、CU50里面2个标准函数有修改&#xff1a; ----------LCUKOF01----函数----------------CALL FUNCTION CU01_DISPLAY_BOMEXPORTINGmasterdata rcuko-ukompRESULT …

LoRa技术未来发展前景:物联网和边缘计算的引领者

随着物联网和边缘计算的快速发展&#xff0c;低功耗广域网&#xff08;LoRa&#xff09;技术在连接远距离设备、实现长距离通信和满足低功耗需求方面崭露头角。本文将分析LoRa技术在未来的发展前景&#xff0c;尤其是在物联网和边缘计算领域的潜在影响。 LoRa技术的核心优势 1…

python:使用卷积神经网络(CNN)进行回归预测

作者:CSDN @ _养乐多_ 本文详细记录了从Excel或者csv中读取用于训练卷积神经网络(CNN)模型的数据,包括多个自变量和1个因变量数据,以供卷积神经网络模型的训练。随后,我们将测试数据集应用于该CNN模型,进行回归预测和分析。 该代码进一步修改可用于遥感影像回归模型. …

Android位置服务和应用权限

Github:https://github.com/MADMAX110/Odometer 一、使用位置服务 之前的Odometer应用是显示一个随机数&#xff0c;现在要使用Android的位置服务返回走过的距离。 修改getDiatance方法使其返回走过的距离&#xff0c;为此要用Android的位置服务。这些服务允许你得到用户的当…

milvus和相似度检索

流程 milvus的使用流程是 创建collection -> 创建partition -> 创建索引(如果需要检索) -> 插入数据 -> 检索 这里以Python为例, 使用的milvus版本为2.3.x 首先按照库&#xff0c; python3 -m pip install pymilvus Connect from pymilvus import connections c…

12.SpringBoot之RestTemplate的使用

SpringBoot之RestTemplate的使用 初识RestTemplate RestTemplate是Spring框架提供用于调用Rest接口的一个应用&#xff0c;它简化了与http服务通信方式。RestTemplate统一Restfull调用的标准&#xff0c;封装HTTP链接&#xff0c;只要需提供URL及返回值类型即可完成调用。相比…

工业互联网系列1 - 智能制造中有哪些数据在传输

工业互联网以网络为基础&#xff0c;需要传输的数据种类多种多样&#xff0c;这些数据对于实时监控、生产优化、设备维护和决策支持等方面都至关重要。 以下是一些常见智能制造业中需要传输的数据类型&#xff1a; 传感器数据&#xff1a;制造设备上安装的传感器&#xff08;如…

原理:用UE5制作一个2D游戏

选中资产图片右键--Sprite Actions--Apply Paper2D Texture Settings 制作场景 把它丢到场景里&#xff0c;并把坐标归零 创建图块集tileset 打开新建的tile set&#xff0c;根据最小图块设置最小尺寸单元 选择需要的图块单元&#xff0c;add box 对新建的tile set右键创建til…

简单实现接口自动化测试(基于python+unittest)

简介 本文通过从Postman获取基本的接口测试Code简单的接口测试入手&#xff0c;一步步调整优化接口调用&#xff0c;以及增加基本的结果判断&#xff0c;讲解Python自带的Unittest框架调用&#xff0c;期望各位可以通过本文对接口自动化测试有一个大致的了解。 引言 为什么要…

深度学习中的激活函数

给定一个线性变换可以把x的值映射到一条直线上&#xff0c;如下图 输出结果就是y1w1xb1 如果y1经过一个线性变换得到一个y2&#xff0c;那么x和y2的关系是什么&#xff1f; 答案&#xff0c;毫无疑问是一条直线&#xff0c;不管如何的线性变换&#xff0c;依旧是一个线性的问…

关于网络协议的若干问题(三)

1、当发送的报文出问题的时候&#xff0c;会发送一个 ICMP 的差错报文来报告错误&#xff0c;但是如果 ICMP 的差错报文也出问题了呢&#xff1f; 答&#xff1a;不会导致产生 ICMP 差错报文的有&#xff1a; ICMP 差错报文&#xff08;ICMP 查询报文可能会产生 ICMP 差错报文…

UI自动化测试:Selenium+PO模式+Pytest+Allure整合

本人目前工作中未涉及到WebUI自动化测试&#xff0c;但为了提升自己的技术&#xff0c;多学习一点还是没有坏处的&#xff0c;废话不多说了&#xff0c;目前主流的webUI测试框架应该还是selenium&#xff0c;考虑到可维护性、拓展性、复用性等&#xff0c;我们采用PO模式去写我…

【ElasticSearch】更新es索引生命周期策略,策略何时对索引生效

大家好&#xff0c;我是好学的小师弟&#xff0c;今天和大家讨论下更新es索引生命周期策略后&#xff0c;策略何时对索引生效 结论: 若当前索引已应用策略A(旧)&#xff0c;更新完策略A后&#xff0c;新的策略A会立即对原来的已经应用该策略的索引生效&#xff1b;若当前索引…

OPPO realme 真我 一加 刷机工具下载 ColorOS Upgrade Tool

Download Realme Upgrade Tool for Windows Download ColorOS Upgrade Tool for Windows Realme升级工具是由Realme开发的Windows应用程序&#xff0c;可帮助用户升级其Realme设备上的固件。此工具支持在Realme Ul 3.0或更高版本上运行的Realme 设备。OPPO realme 真我 一加 …

GienTech动态|入选软件和信息技术服务竞争力百强;参展世界计算大会、网络安全博览会

———— GienTech动态 ———— 中电金信参展广东省网络安全博览会、世界计算机大会 近期&#xff0c;中电金信跟随中国电子参展2023年广东省网络安全博览会&#xff08;下简称“博览会”&#xff09;和2023世界计算大会。在两大峰会上&#xff0c;中电金信展出了金融级数字底…

【虹科干货】Redis Enterprise 自动分层技术:大数据集高性能解决方案

越来越多的应用程序依赖于庞大的数据集合&#xff0c;而这些应用程序必须快速响应。借助自动分层&#xff0c;Redis Enterprise 7.2 帮助开发人员轻松创建超快的应用程序。何乐而不为&#xff1f; Redis将数据存储在内存中&#xff0c;因此应用程序能以最快的速度检索和处理数…

“过度炒作”的大模型巨亏,Copilot每月收10刀,倒赔20刀

大模型无论是训练还是使用&#xff0c;都比较“烧钱”&#xff0c;只是其背后的成本究竟高到何处&#xff1f;已经推出大模型商用产品的公司到底有没有赚到钱&#xff1f;事实上&#xff0c;即使微软、亚马逊、Adobe 这些大厂&#xff0c;距离盈利之路还有很远&#xff01;同时…

精品Python的计算机科学研究话题管理系统-可视化大屏

《[含文档PPT源码等]精品Python的计算机科学研究话题管理系统设计与实现-爬虫》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技术…

Vue 中 KeepAlive 内置缓存使用

KeepAlive 介绍及使用场景 KeepAlive 是 vue 中的内置组件&#xff0c;当多个组件动态切换时可以对实例状态进行缓存&#xff0c;用法如下 <router-view v-slot"{ Component }"><keep-alive><component :is"Component" /></keep-al…

让 Visual Studio 用上 ChatGPT

一、简介 Visual chatGPT Studio 是 Visual Studio 的一个免费扩展&#xff0c;它直接在 IDE 中添加了 chatGPT 功能。它允许用户以可以根据菜单功能的方式使用 chatGPT。 二、功能介绍 该扩展提供了一组使用 ChatGPT 命令&#xff0c;可以在编辑器中选择你需要处理的代码或…