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

news2024/11/20 13:23:19

文章目录

  • 前言
  • 一、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,默认填充0
    std::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.coloradmin.cn/o/1088547.html

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

相关文章

【算法练习Day19】二叉搜索树的最近公共祖先二叉搜索树中的插入操作删除二叉搜索树中的节点

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 二叉搜索树的最近公共祖先叉…

MS5611的ZYNQ驱动试验之一 分析

0&#xff0c;MS5611框图 1&#xff0c;原理图 项目需要用到MS5611气压计模块&#xff0c;原理图很简单明了&#xff0c;如下&#xff1a; 这里PS接GND是SPI接口模式&#xff0c;PS接VDD是I2C接口模式。我在设计原理图时候直接设置成了SPI模式&#xff0c;当然这个SPI不是纯粹意…

ubuntu 22.04.3 live server图文安装流程

备注&#xff1a;以下操作全用键盘&#xff0c;tab切换&#xff0c;enter确认&#xff0c;方向键移动&#xff1b; 一、安装操作系统 1、 选择安装&#xff0c;第一个&#xff1b; 2、选择语言&#xff0c;这里只能选择英语&#xff0c;无中文&#xff1b; 3、继续而不更新 4、…

springcloud笔记(7)-限流降级Sentinel

官方文档&#xff1a;概述 | Spring Cloud Alibaba basic-api-resource-rule | Sentinel (sentinelguard.io) Sentinel是SpringCloudAlibaba的组件。 sentinel的功能 introduction | Sentinel 流量控制 熔断降级&#xff1a;降低调用链路中的不稳定资源 系统负载保护&am…

什么是接口自动化?为什么要做?和怎么做接口自动化?

服务端接口测试介绍 什么是服务端&#xff1f; 一般所说的服务端是指为用户在 APP 或 PC 使用的互联网功能提供数据服务的背后的一切。以天猫精灵智能音箱系列的产品链路为例&#xff0c;服务端便是网关&#xff08;包括网关在内&#xff09;之后的链路。 什么是接口&#xf…

数据结构—— AVL树

&#xff08;一&#xff09; 基础补充 二叉搜索树(BST) 定义&#xff1a; 二叉搜索树&#xff08;Binary Search Tree&#xff09;&#xff0c;简写BST&#xff0c;是满足某些条件的特殊二叉树。任何一个节点的左子树上的点&#xff0c;都必须小于当前节点。任何一个…

java split分割去掉空值

代码如下&#xff1a; public static void main(String[] args) {String dataString "#01#02#03#00#05#434";String[] infos Arrays.stream(dataString.split("#")).filter(s -> !s.isEmpty()).toArray(String[]::new);//投向领域IDString[] infos2 d…

深度学习-房价预测案例

1. 实现几个函数方便下载数据 import hashlib import os import tarfile import zipfile import requests#save DATA_HUB dict() DATA_URL http://d2l-data.s3-accelerate.amazonaws.com/def download(name, cache_diros.path.join(.., data)): #save"""下载…

独立站活动怎么复盘,做独立站需要掌握哪些?-站斧浏览器

独立站的活动形式多种多样&#xff0c;可以通过推出抽奖活动、举办线下活动或者利用社交媒体平台来增加用户互动和参与度。但是要做好一个独立站&#xff0c;除了活动形式&#xff0c;还需要掌握设计能力、编程技术、SEO知识和内容创作能力。 独立站活动怎么复盘&#xff1f; …

学习编程-先改变心态

编程失败的天才 林一和我很久以前就认识了——我从五年级就认识他了。他是班上最聪明的孩子。如果每个人在家庭作业或考试准备方面需要帮助&#xff0c;他们都会去那里。 有趣的是&#xff0c;林一不是那种连续学习几个小时的孩子。 他的聪明才智似乎与生俱来&#xff0c;几乎毫…

Selenium八大定位策略实战,你会了么?

Selenium是一款非常强大的自动化测试工具&#xff0c;支持多种编程语言&#xff0c;如Java、Python等。在使用Selenium进行自动化测试时&#xff0c;定位元素是非常重要的一步&#xff0c;只有正确定位到元素才能进行后续的操作&#xff0c;如输入数据、点击按钮等。在Selenium…

HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Radio

单选框&#xff0c;提供相应的用户交互选择项。该组件从API Version 8开始支持。无子组件。 一、接口 Radio(options: {value: string, group: string}) 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 参数: 二、属性 除支持通用属性外&#xff0c;还支持以…

springBoot组件注册

springBoot组件注册 前言1、创建组件文件2、写属性3、生成get和set方法4、以前注册的方法5、现在注册的方法6、在启动文件查看7、多实例Scope("prototype")8、注册第三方包导入对应的场景启动器注册组件查看是否存在也可以通过Import(FastsqlException.class)导入但是…

文字雨特效

效果展示 CSS 知识点 简易实现云朵技巧text-shadow 属性的灵活运用filter 属性实现元素自动变色 实现页面布局 <div class"container"><div class"cloud"><h2>Data Clouds Rain</h2></div> </div>实现云朵 实现云…

什么是API网关?——驱动数字化转型的“隐形冠军”

什么是API网关 API网关&#xff08;API Gateway&#xff09;是一个服务器&#xff0c;位于应用程序和后端服务之间&#xff0c;提供了一种集中式的方式来管理API的访问。它是系统的入口点&#xff0c;负责接收并处理来自客户端的请求&#xff0c;然后将请求路由到相应的后端服…

代码随想录第14天 | ● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组

300.最长递增子序列 /*** param {number[]} nums* return {number}*/ var lengthOfLIS function(nums) {let dp Array(nums.length).fill(1);let result 1;for(let i 1; i < nums.length; i) {for(let j 0; j < i; j) {if(nums[i] > nums[j]) {dp[i] Math.max…

最新开源ThinkPHP6框架云梦卡社区系统源码/亲测可用(全新开发)

源码简介&#xff1a; 最新开源ThinkPHP6云梦卡社区系统源码&#xff0c;它是一款基于ThinkPHP 6框架开发的开源社区系统源码。该系统源码具有强大而稳定的后端架构&#xff0c;和简洁易操作的前端界面&#xff0c;能够给人们提供完整的社区功能和更具体的服务。 全新云梦卡社…

fiddler如何抓模拟器中APP的包

第一步&#xff1a;fiddler配置 1、打开fiddler&#xff0c;依次点击工具&#xff08;tools&#xff09;》选项&#xff08;options&#xff09; 2、进入HTTPS选项&#xff0c;先选中DecryptHTTPStraffic&#xff0c;再选中ignore server certificate errors (unsafe) 3、点击…

【战略合作】新的游戏合作伙伴来袭,CARV 助力 Aavegotchi 发展!

想象这样的一个世界&#xff0c;你的游戏成就不仅仅是徽章&#xff0c;而是你链上声誉的一部分&#xff01;我们的最新游戏合作伙伴 CARV 便遵循这样的愿景。CARV 与 Aavegotchi 达成合作&#xff0c;旨在将下一代游戏玩家引入 Web3 世界。 CARV 正在构建一个以游戏为核心的身…

【云计算】相关解决方案介绍

文章目录 1.1 云服务环境 Eucalyptus1.1.1 介绍1.1.2 开源协议及语言1.1.3 官方网站 1.2 开源云计算平台 abiCloud1.2.1 开源协议及语言1.2.2 官方网站 1.3 分布式文件系统 Hadoop1.3.1 开源协议及语言1.3.2 官方网站 1.4 JBoss云计算项目集 StormGrind1.4.1 开源协议及语言1.4…