当前位置: 首页 > news >正文

【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容器的基本使用方法,以及它在实际编程中的作用和优势。如果有任何疑问,请随时提问。

相关文章:

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

文章目录 前言一、list简介1.1 list是什么1.2 list的头文件 二、list2.1 定义对象2.2 list构造函数2.3 list的属性函数 总结 前言 STL&#xff08;Standard Template Library&#xff09;是C标准库的一个重要组成部分&#xff0c;提供了一套丰富的数据结构和算法&#xff0c;可…...

WSL+vscode配置miniob环境

1.配置WSL Windows Subsystem for Linux入门&#xff1a;安装配置图形界面中文环境vscode wu-kan 2.获取源码 找个位置Git Bash然后拉取代码 git clone https://github.com/oceanbase/miniob.git 3.安装相关依赖 https://gitee.com/liangcha-xyy/source/blob/master/how…...

Flutter SliverAppBar 吸顶效果

吸顶是常见的布局&#xff0c;主要使用的是CustomScrollView 和SliverApp组件实现的 页面布局 overrideWidget build(BuildContext context) {return CustomScrollView(controller: controller.scrollController!,physics: const BouncingScrollPhysics(),slivers: [SliverApp…...

Java Spring Boot 自动装配:简化配置和提高开发效率

Spring Boot 自动装配是 Spring Boot 提供的一种特性&#xff0c;它可以根据应用程序的依赖关系和配置信息&#xff0c;自动配置应用程序的各种组件和功能。这样&#xff0c;开发者可以将更多的精力放在业务逻辑的实现上&#xff0c;而不需要手动配置和管理各种组件。 1. 自动…...

对象转换之modelmapper

1. 官网地址&#xff1a;http://modelmapper.org 源码地址&#xff1a;GitHub - modelmapper/modelmapper: Intelligent object mapping 2.实现原理&#xff1a; 主要是基于匹配策略进行属性的转化&#xff0c;目前支持三种策略&#xff1a; 2.1 Standard&#xff08;默认标准…...

Ant Design+react 路由跳转

今天我们来继续探讨react的路由跳转 首先&#xff0c;创建router文件夹中的index import { lazy } from "react"; import { Outlet,useRoutes } from react-router-dom; //引入页面&#xff0c;引用了路由懒加载 const One lazy(() > import(../pages/one)); c…...

提高爬虫效率的秘诀之一:合理配置库池数量

在提高爬虫效率的过程中&#xff0c;合理配置库池数量是一个重要的秘诀。通过增加或减少库池的数量&#xff0c;可以有效提升爬虫系统的效率和稳定性。本文将介绍如何合理配置库池数量&#xff0c;以及配置不同数量库池的优缺点&#xff0c;帮助您提高爬虫效率&#xff0c;顺利…...

初学者必看,前端 Debugger 调试学习

1.文章简介&#xff1a; 报错和Bug&#xff0c;是贯穿程序员整个编程生涯中&#xff0c;无法回避的问题。而调试&#xff0c;就是帮助程序员定位问题、解决问题的重要手段&#xff0c;因此调试是每个程序员必备技能。 调试本身可分为两个过程: 定位问题 和 解决问题&#xff0…...

Dubbo—Admin 整体架构与安装步骤

​回顾 Dubbo 服务治理体系的总体架构&#xff0c;Admin 是服务治理控制面中的一个核心组件&#xff0c;负责微服务集群的服务治理、可视化展示等。 Admin 部署架构 总体上来说&#xff0c;Admin 部署架构分为以下几个部分&#xff1a; Admin 主进程&#xff0c;包括服务发现…...

C++11打断线程的几种方式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pthread_cancel1.代码演示2.两个重要方法1.pthread_setcancelstate2.pthread_setcanceltype 3.资源回收 二、Boost1.看代码2.资源泄露2.资源回收 总结 前言…...

如何提升网站排名和用户体验:优化网站速度

网站的排名和用户满意度直接受到站点内容的加载速度影响深远。通过精心的网站优化&#xff0c;您不仅可以提高排名&#xff0c;还可以提供更出色的用户体验&#xff0c;尽管用户可能不会察觉到您的网站加载得更快&#xff0c;但这是一个非常有意义的改进。在这篇文章中&#xf…...

【Redis】Hash 哈希内部编码方式

Hash 哈希内部编码方式 哈希的内部编码有两种&#xff1a; ziplist&#xff08;压缩列表&#xff09;&#xff1a;当哈希类型元素个数⼩于hash-max-ziplist-entries配置&#xff08;默认512个&#xff09;、同时所有值都⼩于hash-max-ziplist-value配置&#xff08;默认64字节…...

JUC第二十八讲:JUC工具类: Semaphore详解

JUC工具类: Semaphore详解 本文是JUC第二十八讲&#xff0c;JUC工具类: Semaphore详解。Semaphore底层是基于AbstractQueuedSynchronizer来实现的。Semaphore称为计数信号量&#xff0c;它允许n个任务同时访问某个资源&#xff0c;可以将信号量看做是在向外分发使用资源的许可证…...

vue3组合式API实现父组件触发子组件中的方法 | vue3中ref的用法 | defineExpose的使用场景

vue3组合式API实现父组件触发子组件中的方法 | vue3中ref的用法 | defineExpose的使用场景 目录 vue3组合式API实现父组件触发子组件中的方法 | vue3中ref的用法 | defineExpose的使用场景一、问题背景二、解决方法三、示例 一、问题背景 代码环境&#xff1a;vue3 &#xff0…...

【Qt之QTableWidget和QTreeWidget】树悬停、选择样式及表格表头和首行间隔线

QTableWidget设置表头与首行间隔线 win10 实例化QTableWidget后&#xff0c;表格表头和首行中间无间隔线&#xff0c;以下是通过样式表进行设置&#xff1a; // 设置横向表格头的间隔线&#xff0c;可设置四个方向的间隔线,不需要间隔线的可以设置为0px// border-left:0px sol…...

使用余弦算法计算向量相似性

import pandas as pd import numpy as np import openaifrom openai.embeddings_utils import get_embedding, cosine_similarityopenai.api_key sk-???? embedding_model "text-embedding-ada-002" embedding_encoding "cl100k_base" # this the …...

存档&改造【06】Apex-Fancy-Tree-Select花式树的使用误删页数据还原(根据时间节点导出导入)

之前一直想实现厂区-区域-产线之间的级联选取&#xff0c;于是导入插件Apex-Fancy-Tree-Select花式树 存档&#xff06;改造【03】Apex-Fancy-Tree-Select花式树的导入-CSDN博客 现在则是在Oracle Apex中的应用 花式书级联列表展示厂区-区域-产线 想要实现的效果 由厂区>…...

OpenCV7-copyTo截取ROI

OpenCV7-copyTo截取ROI copyTo截取感兴趣区域 copyTo截取感兴趣区域 有时候&#xff0c;我们只对一幅图像中的部分区域感兴趣&#xff0c;而原图像又十分大&#xff0c;如果带着非感兴趣区域一次处理&#xff0c;就会对程序的内存造成负担&#xff0c;因此我们希望从原始图像中…...

OpenCV10-图像直方图:直方图绘制、直方图归一化、直方图比较、直方图均衡化、直方图规定化、直方图反射投影

OpenCV10-图像直方图&#xff1a;直方图绘制、直方图归一化、直方图比较、直方图均衡化、直方图规定化、直方图反射投影 1.直方图的绘制2.直方图归一化3.直方图比较4.直方图均衡化5.直方图规定化&#xff08;直方图匹配&#xff09;6.直方图反向投影 1.直方图的绘制 图像直方图…...

线性回归模型进行特征重要性分析

目的 线性回归是很常用的模型&#xff1b;在局部可解释性上也经常用到。 数据归一化 归一化通常是为了确保不同特征之间的数值范围差异不会对线性模型的训练产生过大的影响。在某些情况下&#xff0c;特征归一化可以提高模型的性能&#xff0c;但并不是所有情况下都需要进行归一…...

Python 3.14 JIT架构深度拆解(含官方未发布IR层流程图+Hot Code Path决策树)

第一章&#xff1a;Python 3.14 JIT编译器演进背景与设计哲学Python 长期以来以解释执行和动态灵活性著称&#xff0c;但性能瓶颈在数值计算、实时服务与高吞吐系统中日益凸显。CPython 解释器的字节码执行模型虽稳定可靠&#xff0c;却难以突破单线程 GIL 与逐指令解释带来的固…...

Qwen3.5-9B-AWQ-4bitWeb界面使用教程:上传/提问/防重复提交/结果解析全流程

Qwen3.5-9B-AWQ-4bit Web界面使用教程&#xff1a;上传/提问/防重复提交/结果解析全流程 1. 认识Qwen3.5-9B-AWQ-4bit模型 Qwen3.5-9B-AWQ-4bit是一个强大的多模态AI模型&#xff0c;它能够同时理解图片和文字。想象一下&#xff0c;你有一个既会看图片又会回答问题的智能助手…...

Redis 用错接口反而更慢?高并发下这几个坑,90% 后端都踩过

前言线上出过一个特别反直觉的故障&#xff1a;接口本来直连 MySQL 跑得好好的&#xff0c;加上 Redis 缓存后&#xff0c;响应时间直接翻倍&#xff0c;CPU 还往上飘。一开始怀疑网络、怀疑 Redis 性能、怀疑代码 Bug&#xff0c;排查一整天才发现&#xff1a;缓存逻辑没错&am…...

LFM2.5-1.2B-Thinking-GGUF部署教程:Ubuntu/CentOS/Debian三平台通用安装步骤

LFM2.5-1.2B-Thinking-GGUF部署教程&#xff1a;Ubuntu/CentOS/Debian三平台通用安装步骤 1. 平台简介 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型&#xff0c;特别适合在资源有限的环境中快速部署。该镜像内置了GGUF模型文件和llama.cpp运行时&#xff…...

C++的std--allocator_traits分配器特性与自定义内存管理的适配

C标准库中的内存管理一直是个既基础又复杂的主题。std::allocator_traits作为C11引入的分配器特性模板&#xff0c;为自定义内存管理提供了统一的适配接口&#xff0c;让开发者能在不重写整套分配逻辑的情况下&#xff0c;灵活扩展内存管理策略。无论是实现高性能内存池&#x…...

Graphormer部署指南:3.7GB纯Transformer图神经网络GPU快速启动

Graphormer部署指南&#xff1a;3.7GB纯Transformer图神经网络GPU快速启动 1. 项目概述 Graphormer是一种基于纯Transformer架构的图神经网络&#xff0c;专门为分子图&#xff08;原子-键结构&#xff09;的全局结构建模与属性预测而设计。这个3.7GB大小的模型在OGB、PCQM4M…...

Gated DeltaNet 线性注意力:揭秘大模型算力魔咒的破局之道!

文章深入探讨了线性注意力机制在大模型中的重要性&#xff0c;特别是Gated DeltaNet如何通过改变运算顺序&#xff0c;将Transformer的注意力计算复杂度从平方级降低到线性级&#xff0c;从而打破算力瓶颈。文中对比了阿里Qwen、Kimi Linear等模型的线性架构应用&#xff0c;以…...

深入解析STM32 map文件:从编译到内存优化的关键步骤

1. 为什么STM32开发者必须掌握map文件分析 第一次接触STM32的map文件时&#xff0c;我和大多数新手一样感到一头雾水。这个由编译器自动生成的文本文件&#xff0c;乍看就像天书般难以理解。直到有次项目遇到内存不足的紧急情况&#xff0c;我才真正体会到map文件的价值——它不…...

Qwerty Learner单词难度分级:智能调整训练强度的终极指南

Qwerty Learner单词难度分级&#xff1a;智能调整训练强度的终极指南 【免费下载链接】qwerty-learner 为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers 项目地址: https://…...

突破百度网盘限速:面向资源获取者的高效直链解析方案

突破百度网盘限速&#xff1a;面向资源获取者的高效直链解析方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 你是否曾经历过这样的场景&#xff1f;深夜下载一份重要的项目…...