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

c++的学习之路:14、list(1)

本章讲一下如何使用list,代码在文章末

目录

一、list介绍

二、增

三、删

四、查和改

五、交换

六、代码


一、list介绍

首先还是看一看官方文档的介绍如下图,如下方五点:

1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。

2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。

3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高 效。

4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率 更好。

5. 与其他序列式容器相比,list和forward_list最大的缺陷是不支持任意位置的随机访问,比如:要访问list 的第6个元素,必须从已知的位置(比如头部或者尾部)迭代到该位置,在这段位置上迭代需要线性的时间 开销;list还需要一些额外的空间,以保存每个节点的相关联信息(对于存储类型较小元素的大list来说这 可能是一个重要的因素)

在图二就是一些参数,可以明显看到没有【】,因为list就是相当于一个带头双向链表,参数和之前学习的差不多,就不详细讲了。

二、增

如下方代码就是就创建了一个链表为l1和l2进行尾插和头插然后在利用for进行打印。

void Test1()
{
    list<int> l1;
    l1.push_back(1);
    l1.push_back(2);
    l1.push_back(3);
    l1.push_back(4);
    list<int> l2;
    l2.push_front(1);
    l2.push_front(2);
    l2.push_front(3);
    l2.push_front(4);
    for (auto li : l1)
    {
        cout << li << ' ';
    }
    cout << endl;
    for (auto li : l2)
    {
        cout << li << ' ';
    }
    cout << endl;
}

三、删

如下就是先尾删打印在进行头删打印,代码和测试如下。

void Test2()
{
    list<int> l1;
    l1.push_back(1);
    l1.push_back(2);
    l1.push_back(3);
    l1.push_back(4);
    l1.push_back(5);
    l1.push_back(6);
    for (auto li : l1)
    {
        cout << li << ' ';
    }
    cout << endl;
    l1.pop_back();
    l1.pop_back();
    for (auto li : l1)
    {
        cout << li << ' ';
    }
    cout << endl;
    l1.pop_front();
    l1.pop_front();
    for (auto li : l1)
    {
        cout << li << ' ';
    }
    cout << endl;
}
 

四、查和改

下方代码就是利用find函数进行插在,找到了3然后返回位置给pos在这个地方进行插入30,然后在查找30再把这个删掉。

void Test3()
{
    list<int> l1;
    l1.push_back(1);
    l1.push_back(2);
    l1.push_back(3);
    l1.push_back(4);
    l1.push_back(5);
    l1.push_back(6);
    for (auto li : l1)
    {
        cout << li << ' ';
    }
    cout << endl;
    auto pos = find(l1.begin(),l1.end(),3);
    l1.insert(pos, 30);
    for (auto li : l1)
    {
        cout << li << ' ';
    }
    cout << endl;
    pos= find(l1.begin(), l1.end(), 30);
    l1.erase(pos);
    for (auto li : l1)
    {
        cout << li << ' ';
    }
    cout << endl;
}
 

五、交换

交换两个链表的数值,这个原理就是交换头指针,如下方代码所示。

void Test4()
{
    list<int> l1;
    l1.push_back(1);
    l1.push_back(2);
    l1.push_back(3);
    l1.push_back(4);
    l1.push_back(5);
    l1.push_back(6);
    list<int> l2;
    l2.push_back(10);
    l2.push_back(20);
    l2.push_back(30);
    l2.push_back(40);
    l2.push_back(50);
    l2.push_back(60);
    for (auto li : l1)
    {
        cout << li << ' ';
    }
    cout << endl;
    for (auto li : l2)
    {
        cout << li << ' ';
    }
    cout << endl;
    l1.swap(l2);
    for (auto li : l1)
    {
        cout << li << ' ';
    }
    cout << endl;
    for (auto li : l2)
    {
        cout << li << ' ';
    }
    cout << endl;

六、代码

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <list>
using namespace std;void Test1()
{list<int> l1;l1.push_back(1);l1.push_back(2);l1.push_back(3);l1.push_back(4);list<int> l2;l2.push_front(1);l2.push_front(2);l2.push_front(3);l2.push_front(4);for (auto li : l1){cout << li << ' ';}cout << endl;for (auto li : l2){cout << li << ' ';}cout << endl;
}void Test2()
{list<int> l1;l1.push_back(1);l1.push_back(2);l1.push_back(3);l1.push_back(4);l1.push_back(5);l1.push_back(6);for (auto li : l1){cout << li << ' ';}cout << endl;l1.pop_back();l1.pop_back();for (auto li : l1){cout << li << ' ';}cout << endl;l1.pop_front();l1.pop_front();for (auto li : l1){cout << li << ' ';}cout << endl;
}void Test3()
{list<int> l1;l1.push_back(1);l1.push_back(2);l1.push_back(3);l1.push_back(4);l1.push_back(5);l1.push_back(6);for (auto li : l1){cout << li << ' ';}cout << endl;auto pos = find(l1.begin(),l1.end(),3);l1.insert(pos, 30);for (auto li : l1){cout << li << ' ';}cout << endl;pos= find(l1.begin(), l1.end(), 30);l1.erase(pos);for (auto li : l1){cout << li << ' ';}cout << endl;
}void Test4()
{list<int> l1;l1.push_back(1);l1.push_back(2);l1.push_back(3);l1.push_back(4);l1.push_back(5);l1.push_back(6);list<int> l2;l2.push_back(10);l2.push_back(20);l2.push_back(30);l2.push_back(40);l2.push_back(50);l2.push_back(60);for (auto li : l1){cout << li << ' ';}cout << endl;for (auto li : l2){cout << li << ' ';}cout << endl;l1.swap(l2);for (auto li : l1){cout << li << ' ';}cout << endl;for (auto li : l2){cout << li << ' ';}cout << endl;
}int main()
{Test4();
}

相关文章:

c++的学习之路:14、list(1)

本章讲一下如何使用list&#xff0c;代码在文章末 目录 一、list介绍 二、增 三、删 四、查和改 五、交换 六、代码 一、list介绍 首先还是看一看官方文档的介绍如下图&#xff0c;如下方五点&#xff1a; 1. list是可以在常数范围内在任意位置进行插入和删除的序列式…...

huawei 华为交换机 配置 VLAN 聚合示例

组网需求 某公司拥有多个部门且位于同一网段&#xff0c;为了提升业务安全性&#xff0c;将不同部门的用户划分到不同VLAN 中&#xff0c;如 图 5-7 所示&#xff0c; VLAN2 和 VLAN3 属于不同部门。各部门均有访问Internet需求&#xff0c;同时由于业务需要&#xff0c;不同部…...

【QT+QGIS跨平台编译】056:【pdal-dimbuilder+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、pdal介绍二、dimbuilder介绍三、pdal下载四、文件分析五、pro文件六、编译实践七、生成Dimension.hpp八、生成pdal_features.hpp一、pdal介绍 PDAL(Point Data Abstraction Library)是一个开源库,用于处理点云数据的获取、过滤、转换、分析和…...

【Python】探索Python中的aiohttp:构建高效并发爬虫

后来 我总算学会了 如何去爱 可惜你 早已远去 消失在人海 后来 终于在眼泪中明白 有些人 一旦错过就不再 &#x1f3b5; HouZ/杨晓雨TuTu《后来》 在数据密集和网络密集的任务中&#xff0c;提高程序的执行效率是非常重要的。Python作为一门强大的编程语言…...

创建真实项目vue2项目

1. 创建 vue create 项目名 2. 选择自定义 3. 勾选以下必备选项 4.选择使用vue2 5. 选择哈希模式&#xff08;n&#xff09;; css选择Less 6. ESLint校验 选择 7. 保存&#xff08;按照默认&#xff09; 8. 在哪里添加ESLint文件 9. 要不要把这个改成将来的预设&am…...

【大数据】安装hive-3.1.2

1、上传HIVE包到/opt/software目录并解压到/opt/modules/ tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/modules/ 2、修改路径 mv /opt/modules/apache-hive-3.1.2-bin/ /opt/modules/hive 3、将hIVE下的bin目录加入到/etc/profile中 export HIVE_HOME/opt/module…...

STM32工程 如何设置堆栈大小(Heap和Stack)

方法1&#xff1a;通过CubeMX、CubeIDE 配置 方法2&#xff1a;直接在启动文件中修改 &#xff08;适合所有Keil工程&#xff09; Heap、Stack的值大小&#xff0c;不管使用哪种开发环境&#xff0c;它俩都肯定在启动文件中。 可以通过CtrlF&#xff0c;搜索: Heap&#xff0…...

光纤资源运维管理升级方案,让您的网络资产价值倍增!

光纤资源管理的现状与风险 1. 管理现状 ▌▶ 排查难 ▌▶ 跟踪难 2. 潜在风险 故障隐患 资源丢失 增加业务中断时长 纤心占用不清 障排查复杂 运维压力巨大 基于数字孪生物联网技术的数字化管理升级方案 1. 快速创建光纤资源数字孪生空间 市级 区级 街道 光缆 机房 机柜 2…...

【深度学习】最强算法之:深度Q网络(DQN)

深度Q网络 1、引言2、深度Q网络2.1 定义2.2 原理2.3 实现方式2.4 算法公式2.5 代码示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c; 马上清明小长假了&#xff0c; 你这准备去哪里玩啊&#xff1f; 小鱼&#xff1a;哪也不去&#xff0c;在家待着 小屌丝&#xff1a…...

微软文本转语音和语音转文本功能更新,效果显著!

今天我要和大家分享一个新功能更新——微软的文本转语音和语音转文本功能。最近&#xff0c;微软对其AI语音识别和语音合成技术进行了重大升级&#xff0c;效果非常好&#xff0c;现在我将分别为大家介绍这两个功能。 先来听下这个效果吧 微软文本转语音和语音转文本功能更新 …...

充场拉新工作室保证金靠谱吗?找一手渠道是否免费?

在当前的互联网经济中&#xff0c;充场拉新工作室作为一种新兴的创业项目&#xff0c;吸引了众多创业者的关注。然而&#xff0c;关于是否需要支付保证金、加盟费&#xff0c;以及如何寻找免费的充场拉新一手渠道&#xff0c;许多人仍然存在疑问。 本文将为您提供专业的解答&a…...

揭秘淘宝商品详情数据接口(Taobao.item_get)

淘宝商品详情数据接口&#xff08;Taobao.item_get&#xff09;是一种允许开发者通过API访问淘宝平台上的商品详情信息的接口。通过该接口&#xff0c;开发者可以获取到商品的标题、价格、销量、描述等详细信息&#xff0c;为商品展示和销售提供数据支持。 请求示例&#xff0…...

Linux从入门到精通 --- 4(上).快捷键、软件安装、systemctl、软链接、日期和时区、IP地址

文章目录 第四章(上)&#xff1a;4.1 快捷键4.1.1 ctrl c 强制停止4.1.2 ctrl d 退出4.1.3 history4.1.4 历史命令搜索4.1.5 光速移动快捷键4.1.6 清屏 4.2 软件安装4.2.1 yum4.2.2 apt 4.3 systemctl4.4 软链接4.4.1 ln 4.5 日期和时区4.5.1 date命令4.5.2 date进行日期加减…...

ESP32调试笔记

目录 基于Thonny和micropythonESP32-CAM开发板无法连接Thonnyesp32cam局域网图传esp32代码上位机代码 基于Thonny和micropython ESP32-CAM开发板无法连接Thonny esp32cam有两个模式&#xff1a;下载模式、运行模式 两种模式的接线不同 IO0 短路 GND ! 正是因为两种模式接线…...

python -- NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+

报错分析 完整的报错&#xff1a;urllib3 v2 only supports OpenSSL 1.1.1, currently the ssl module is compiled with LibreSSL 2.8.3. See: https://github.com/urllib3/urllib3/issues/3020报错分析&#xff1a;LibreSSL 是 OpenSSL 的一个分支&#xff0c;LibreSSL 2.8.…...

解决nginx代理后,前端拿不到后端自定义的header

先说结论&#xff0c;因为前端和nginx对接&#xff0c;所以需要在nginx添加如下配置向前端暴露header add_header Access-Control-Expose-Headers Authorization 排查过程 1.后端设置了Authorization 的响应头作为token的返回&#xff0c;前后端本地联调没有问题 response.s…...

C++从入门到精通——类的6个默认成员函数之构造函数

构造函数 前言一、构造函数的概念二、构造函数特性 前言 类的6个默认成员函数&#xff1a;如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数…...

第十四届蓝桥杯省赛大学B组(C/C++)整数删除

原题链接&#xff1a;整数删除 给定一个长度为 N 的整数数列&#xff1a;A1,A2,...,AN。 你要重复以下操作 K 次&#xff1a; 每次选择数列中最小的整数&#xff08;如果最小值不止一个&#xff0c;选择最靠前的&#xff09;&#xff0c;将其删除&#xff0c;并把与它相邻的…...

openGauss学习笔记-257 openGauss性能调优-使用Plan Hint进行调优-Custom Plan和Generic Plan选择的Hint

文章目录 openGauss学习笔记-257 openGauss性能调优-使用Plan Hint进行调优-Custom Plan和Generic Plan选择的Hint257.1 功能描述257.2 语法格式257.3 示例 openGauss学习笔记-257 openGauss性能调优-使用Plan Hint进行调优-Custom Plan和Generic Plan选择的Hint 257.1 功能描…...

智慧校园|智慧校园管理小程序|基于微信小程序的智慧校园管理系统设计与实现(源码+数据库+文档)

智慧校园管理小程序目录 目录 基于微信小程序的智慧校园管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、微信小程序前台 2、管理员后台 &#xff08;1&#xff09;学生信息管理 &#xff08;2&#xff09; 作业信息管理 &#xff08;3&#xff09;公告…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...