《STL 六大组件之容器篇:简单了解 list》

目录

  • 一、list 简介
  • 二、list 的常用接口
    • 1. 构造函数(constructor )
    • 2. 迭代器(iterator)
    • 3. 容量、修改和访问(capacity 、modify and access)

一、list 简介

  简单来说,list 就是数据结构初阶中学习的链表,还是所有特性都具备的带头双向循环链表。带头是为了更好地适应迭代器,双向循环是为了插入和删除的效率。与之前学习的 list 相比,本次学习的 list 升级成为了类模板且增加了迭代器。

二、list 的常用接口

  下面介绍一下 list 各方面的常用接口。

1. 构造函数(constructor )

  下面是 list 常用的四个构造函数的声明和使用。

(1)函数声明

// list 构造函数声明// 1. 默认构造函数
list();
// 2. 指定个数和初始值
list(size_t n, const T& value = T());
// 3. 迭代器构造函数
template<class Iterator>
list(Iterator first, Iterator last);
// 4. 复制构造函数
list(const list<T>& lt);

(2)使用演示

// 1. constructor
void test1()
{// 1. 默认构造函数list<int> lt1;cout << "lt1.size: " << lt1.size() << endl << endl;// 2. 指定个数和初始值list<int> lt2(5, 1);cout << "lt2.size: " << lt2.size() << endl;cout << "lt2: ";for (const auto& e : lt2)cout << e << " ";cout << endl << endl;// 3. 迭代器构造函数vector<int> vt_i;for (int i = 1; i < 5; ++i)vt_i.push_back(i);list<int> lt3(vt_i.begin(), vt_i.end());cout << "lt3.size: " << lt3.size() << endl;cout << "lt3: ";for (const auto& e : lt3)cout << e << " ";cout << endl << endl;// 4. 拷贝构造函数list<int> lt4(lt3);cout << "lt4.size: " << lt4.size() << endl;cout << "lt4: ";for (const auto& e : lt4)cout << e << " ";cout << endl << endl;
}

(3)运行结果
在这里插入图片描述

2. 迭代器(iterator)

  下面介绍 list 常用的四个迭代器。反向迭代器参考正向迭代器的用法。

(1)函数声明

// 1. 普通迭代器
iterator begin();
iterator end();
// 2. const 迭代器
const_iterator begin() const;
const_iterator end() const;
// 3. 反向迭代器
reverse_iterator rbegin();
reverse_iterator rend();
// 4. const 反向迭代器
const_reverse_iterator rbegin() const;
const_reverse_iterator rend() const;

(2)使用演示

// 2. 迭代器
void test2()
{list<int> lt1;for (int i = 1; i < 10; ++i)lt1.push_back(i);// 1. 正向迭代器遍历list<int>::iterator it = lt1.begin();while (it != lt1.end()){cout << *it << " ";++it;}cout << endl;// 2. 反向迭代器遍历list<int>::reverse_iterator rit = lt1.rbegin();while (rit != lt1.rend()){cout << *rit << " ";++rit;}cout << endl;
}

(3)运行结果
在这里插入图片描述

3. 容量、修改和访问(capacity 、modify and access)

  下面分别介绍 list 的 2 个与容量有关的接口、2 个与访问有关的接口,8 个与修改有关的接口。

(1)函数声明
  下面的 T 是模版中的类型参数。

// 1. capacity
size_t size() const;
bool empty() const;// 2. access
T& front();
T& back();// 3. modify
void push_front(const T& value);
void push_back(const T& value);
void pop_front();
void pop_back();
iterator insert(iterator pos, const T& value);  // 在 pos 位置前插入
iterator erase(iterator pos);  // 删除 pos 位置

(2)使用演示

// 3. capacity、access and modify
void test3()
{// 1. capacitylist<int> lt1;if (lt1.empty()){cout << "lt1 is empty.\n";}for (int i = 1; i < 10; ++i)lt1.push_back(i);cout << "lt1.size: " << lt1.size() << endl << endl;// 2. accesscout << "lt1.front: " << lt1.front() << endl;cout << "li1.back: " << lt1.back() << endl;// 3. modifylist<int> lt2;// 插入lt2.push_back(1);lt2.push_front(2);// 打印for (const auto& e : lt2)cout << e << " ";cout << endl;// 插入lt2.insert(lt2.begin(), 10);lt2.insert(lt2.end(), 99);// 打印for (const auto& e : lt2)cout << e << " ";cout << endl;// 删除lt2.pop_back();lt2.pop_front();// 打印for (const auto& e : lt2)cout << e << " ";cout << endl;// 删除lt2.erase(lt2.begin());lt2.erase(--lt2.end());// 打印for (const auto& e : lt2)cout << e << " ";cout << endl;
}

(3)运行结果
在这里插入图片描述

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

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

相关文章

nmslib 是一个 超快、适用于高维向量的最近邻搜索库,基于 HNSW 算法,被广泛用于 语义搜索、推荐系统、人脸识别等任务

nmslib 是什么&#xff1f; nmslib&#xff08;Non-Metric Space Library&#xff09;是一个 高效的最近邻搜索&#xff08;ANN, Approximate Nearest Neighbor Search&#xff09; 库&#xff0c;专门用于 高维向量搜索&#xff0c;适用于 文本、图像、语音等嵌入向量 的相似…

前端流式输出实现详解:从原理到实践

前端流式输出实现详解&#xff1a;从原理到实践 前言一、流式输出核心原理1.1 什么是流式输出&#xff1f;1.2 技术优势对比1.3 关键技术支撑 二、原生JavaScript实现方案2.1 使用Fetch API流式处理关键点解析&#xff1a; 2.2 处理SSE&#xff08;Server-Sent Events&#xff…

【STM32】最后一刷-江科大Flash闪存-学习笔记

FLASH简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&#xff0c;通过闪存存储器接口&#xff08;外设&#xff09;可以对程序存储器和选项字节进行擦除和编程&#xff0c;&#xff08;系统存储器用于存储原厂写入的BootLoader程序&#xff0c;用于串口…

梯度(Gradient)与步长(Step Size)

梯度&#xff08;Gradient&#xff09;与步长&#xff08;Step Size&#xff09; 梯度与步长是优化算法&#xff08;如梯度下降法&#xff09;的核心概念。以下是它们的详细解释&#xff1a; 梯度&#xff08;Gradient&#xff09; ​定义 梯度是一个向量&#xff0c;表示多元…

freecad二开 xmlrpc接口api qtgui

FreeCAD.ConfigGet("UserAppData") 文件夹下创建mod文件夹 mod文件夹底下创建插件文件夹my_server: freecad_server.py&#xff1a; from xmlrpc.server import SimpleXMLRPCServer import FreeCADGui import FreeCADimport queue from PySide2.QtCore import QTi…

鸿蒙NEXT开发日志工具类(ArkTs)

import hilog from ohos.hilog; import { JSON } from kit.ArkTS; import { BusinessError } from kit.BasicServicesKit; import { StrUtil } from ./StrUtil;/*** 日志工具类* author: 鸿蒙布道师* since: 2024/03/31*/ export class LogUtil {private static logSize: numbe…

《Linux运维总结:基于银河麒麟V10+ARM64架构CPU源码编译部署单实例redis7.2.6》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、环境信息 环境信息如下&#xff1a; 主机IP 操作系统 Redis版本 CPU架构 192.168.1.111 K…

基于LSTM的文本分类1——模型搭建

源码 # coding: UTF-8 import torch import torch.nn as nn import torch.nn.functional as F import numpy as npclass Config(object):"""配置参数类&#xff0c;用于存储模型和训练的超参数"""def __init__(self, dataset, embedding):self.…

小了 60,500 倍,但更强;AI 的“深度诅咒”

作者&#xff1a;Ignacio de Gregorio 图片来自 Unsplash 的 Bahnijit Barman 几周前&#xff0c;我们看到 Anthropic 尝试训练 Claude 去通关宝可梦。模型是有点进展&#xff0c;但离真正通关还差得远。 但现在&#xff0c;一个独立的小团队用一个只有一千万参数的模型通关了…

nextjs使用02

并行路由 同一个页面&#xff0c;放多个路由&#xff0c;&#xff0c; 目录前面加,layout中可以当作插槽引入 import React from "react";function layout({children,notifications,user}:{children:React.ReactNode,notifications:React.ReactNode,user:React.Re…

github 无法在shell里链接

当我在shell端git push时&#xff0c;我发现总是22 timeout的问题。 我就进行了以下步骤的尝试并最终得到了解决。 第一步&#xff0c;我先确定我可以curl github&#xff0c;也就是我网络没问题 curl -v https://github.com 如果这个时候不超时和报错&#xff0c;说明网络…

当前主流的大模型知识库软件对比分析

以下是当前主流的大模型知识库软件对比分析&#xff0c;涵盖功能特性、适用场景及优劣势&#xff0c;结合最新技术动态和行业实践提供深度选型参考&#xff1a; 一、企业级智能知识库平台 1. 阿里云百炼&#xff08;Model Studio&#xff09; 核心能力&#xff1a;基于RAG技…

Java的比较器 Comparable 和 Comparator

在 Java 中&#xff0c;Comparable 和 Comparator 是用于对象排序的重要接口。它们提供了不同的排序方式&#xff0c;适用于不同的需求&#xff0c;同时在 Java 底层排序算法中发挥着关键作用。本文将从基础概念、使用方法、排序实现&#xff08;包括升序、降序&#xff09;、底…

基于Qlearning强化学习的太赫兹信道信号检测与识别matlab仿真

目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 太赫兹信道特性 2.2 Q-learning强化学习基础 2.3 基于Q-learning 的太赫兹信道信号检测与识别系统 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2024b仿真结果如下&#xff08;完整代码运行后无水印…

力扣刷题————199.二叉树的右视图

给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,null,5,null,4] 输出&#xff1a;[1,3,4] 解题思路&#xff1a;我们可以想到这…

文件包含漏洞的小点总结

文件本地与远程包含&#xff1a; 文件包含有本地包含与远程包含的区别&#xff1a;本地包含只能包含服务器已经有的问题&#xff1b; 远程包含可以包含一切网络上的文件。 本地包含&#xff1a; ①无限制 感受一下使用phpstudy的文件上传&#xff0c;开启phpstudy的apache…

深度学习处理时间序列(5)

Keras中的循环层 上面的NumPy简单实现对应一个实际的Keras层—SimpleRNN层。不过&#xff0c;二者有一点小区别&#xff1a;SimpleRNN层能够像其他Keras层一样处理序列批量&#xff0c;而不是像NumPy示例中的那样只能处理单个序列。也就是说&#xff0c;它接收形状为(batch_si…

操作系统相关知识点

操作系统在进行线程切换时需要进行哪些动作&#xff1f; 保存当前线程的上下文 保存寄存器状态、保存栈信息。 调度器选择下一个线程 调度算法决策&#xff1a;根据策略&#xff08;如轮转、优先级、公平共享&#xff09;从就绪队列选择目标线程。 处理优先级&#xff1a;实时…

从0到1:Rust 如何用 FFmpeg 和 OpenGL 打造硬核视频特效

引言&#xff1a;视频特效开发的痛点&#xff0c;你中了几个&#xff1f; 视频特效如今无处不在&#xff1a;短视频平台的滤镜美化、直播间的实时美颜、影视后期的电影级调色&#xff0c;甚至 AI 生成内容的动态效果。无论是个人开发者还是团队&#xff0c;视频特效都成了吸引…

【并发编程 | 第一篇】线程相关基础知识

1.并发和并行有什么区别 并发是指多核CPU上的多任务处理&#xff0c;多个任务在同一时刻真正同时执行。 并行是指单核CPU上的多任务处理&#xff0c;多个任务在同一时间段内交替执行&#xff0c;通过时间片轮转实现交替执行&#xff0c;用于解决IO密集型瓶颈。 如何理解线程安…