STL学习笔记之容器

首先我们要学习的是容器

第一个是容器的初始化(构造方式)有三种方式

分别是

第一种

int arr[]={1,2,3}

vector<int> v1(arr,arr+3)

即容器存放的种类和从另外一个数组去拷贝一段数据。

第二种

vector<int> v2(3,10);

第一个3是指存放的进入容器的个数

第二个10是存进容器的值。

第三种

vector<int> v3(v1);

直接将其他容器拷贝过来。

然后我们要了解容器的赋值方法

第一种

vector.assign(beg,end)左闭右开

例如

int arr[]={1,2,3}

vector.assign(arr,arr+3);

那么容器就会装载1,2.

之所以要左闭右开。是因为一个容器的结尾并不是这个容器的最后一个元素,而是元素的后一位。

所以vector.begin()是指的容器的第一位。vector.end()是容器的n+1位(n指元素个数)

那么这样vector.assign(v1.begin(),v2.end())就会拷贝中v2这个容器中的所有元素。

vector.assign(n,elem)

例如vector.assign(3,10);

同构造容器,不再赘述。

第三种vector.swap()

例如v2.swap(v1);就会将v1,v2的内容进行交换。

然后我们要讲的就是容器的大小

首先是

vector,size()那么返回值就是这个中元素的个数。(int类型)

第二个

vector.empty()。这个将会返回bool值,如果容器为空将会返回ture,否则会返回false

第三个

vector.resize(num);重新指定容器的大小,如果容器变长则会用默认值进行填充,如果变短则会自动删除超出容器大小的值。

第四个

vector.resize(num,elem)。这个地方就是把默认值替换为elem。规则相同。

容器的访问

vector[]进行访问就可以了,类比数组。

或者vec.at()。一样的是传入位置即可。

但是如果使用vec.at()出现越界会抛出out_of_range异常。

而vec[]会直接报错。但是区别不大。

接下来是容器的插入

vector.insert(pos,elem);

这个会在pos位置插入elem元素的拷贝,并且返回新数据的位置。

vector.insert(pos,n,elem);

在pos位置插入n个elem数据,无返回值

vector.insert(pos,beg,end);

注意Pos是对应位置的指针即vector.insert(v1.begin()+3,elem);

在pos位置插入beg到end区间的数据(前闭后开),无返回值。

然后就是对容器的末尾进行增删的操作。

vector.push_back(num)和vector.pop_back();即可

接下来我们来学习迭代器

首先迭代器的作用,可以减少容器的越界访问。

再就是迭代器的构造

vector<int>::iterator it;

it=v1.begin();

cout << *it;通过*就可以实现对迭代器指向的元素进行访问和操作。

然后我们来学习迭代器的失效

vector.insert(it,8)由于容器的存储可能会整体搬迁,那么就可能导致迭代器的失效

在这里由于insert()可以返回插入的值的新的位置。

所有it=vector.insert(it,8);可以避免这个问题。

另外一种就是删除元素也有可能导致的迭代器失效。

vector<int>::iteretor it2;

it2=v1.erase(it);

这个时候由于已经erase(it),系统会默认迭代器已经失效了。从而再次使用的时候会报错。

同理如果用it=v1.erase(it);就会重新使得迭代器有效,就可以避免这种问题的出现。

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

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

相关文章

【Linux进行时】进程地址空间

进程地址空间 例子引入&#xff1a; 我们在讲C语言的时候&#xff0c;老师给大家画过这样的空间布局图&#xff0c;但是我们对它不了解 我们写一个代码来验证Linux进程地址空间 #include<stdio.h> #include<assert.h> #include<unistd.h> int g_value100; …

MATLAB在逐渐被Python淘汰吗?

MATLAB和Python都是非常强大的编程工具&#xff0c;各有优势。以下是两段代码的对比&#xff1a; MATLAB代码&#xff1a; import numpy as np from scipy.linalg import eig# 定义一个矩阵A A np.array([[1, 2], [3, 4]])# 计算矩阵A的特征值和特征向量 D, V eig(A)# 输出…

Java基础---第十二篇

系列文章目录 文章目录 系列文章目录一、获取一个类Class对象的方式有哪些?二、ArrayList 和 LinkedList 的区别有哪些?三、用过 ArrayList 吗?说一下它有什么特点?一、获取一个类Class对象的方式有哪些? 搞清楚类对象和实例对象,但都是对象。 第一种:通过类对象的 get…

[机缘参悟-107] :一个IT人关于顺势而为的思考:顺势而为思想在股-市中的体现与应用

目录 前言&#xff1a; 一、顺势而为的核心思想 1.1 道家“顺势而为”的思想 1.2 佛家“顺势而为”的思想 1.3 儒家“顺势而为”的思想 1.4 无处不在的“势” 1.5 逆势而为的代价 二、顺势而为在股市中的应用 2.1 顺势而为的策略 2.2 在别人疯狂的时候悲观&#xff0…

【C++】多线程的学习笔记——白话文版(bushi

目录 为什么要使用多线程 例子 代码 结果 首先要先学的库——thread库 thread的简介 thread的具体使用方法 基本变量的定义 注意&#xff08;小重点&#xff09; join函数的解读&#xff08;重点&#xff09; detach函数的解读 注意 关于vector和thread是联合使用 …

Mac程序坞美化工具 uBar

uBar是一款为Mac用户设计的任务栏增强软件&#xff0c;它可以为您提供更高效和更个性化的任务管理体验。 以下是uBar的一些主要特点和功能&#xff1a; 更直观的任务管理&#xff1a;uBar改变了Mac上传统的任务栏设计&#xff0c;将所有打开的应用程序以类似于Windows任务栏的方…

学习开发一个RISC-V上的操作系统(汪辰老师) — 环境配置

前言 &#xff08;1&#xff09;此系列文章是跟着汪辰老师的RISC-V课程所记录的学习笔记。 &#xff08;2&#xff09;该课程相关代码gitee链接&#xff1b; &#xff08;3&#xff09;PLCT实验室实习生长期招聘&#xff1a;招聘信息链接 &#xff08;4&#xff09;在学习汪辰老…

计算机竞赛 深度学习疲劳检测 驾驶行为检测 - python opencv cnn

文章目录 0 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习加…

Guava限流器原理浅析

文章目录 基本知识限流器的类图使用示例 原理解析限流整体流程问题驱动1、限流器创建的时候会初始化令牌吗&#xff1f;2、令牌是如何放到桶里的&#xff1f;3、如果要获取的令牌数大于桶里的令牌数会怎么样4、令牌数量的更新会有并发问题吗 总结 实际工作中难免有限流的场景。…

c++模板小例子

需要注意的是&#xff0c;模板中函数或方法&#xff0c;要在类或头文件中实现。关键字typename 和class基本等同。构造类模板时&#xff0c;要指明模板参数类型&#xff0c;而函数模板则不用指明参数类型。 #pragma once#include <string.h>#include <windows.h>us…

2023/9/27 -- ARM

【汇编语言相关语法】 1.汇编语言的组成部分 1.伪操作&#xff1a;不参与程序的执行&#xff0c;但是用于告诉编译器程序该怎么编译 .text .global .end .if .else .endif .data2.汇编指令 编译器将一条汇编指令编译成一条机器码&#xff0c;在内存里一条指令占4字节内…

JavaWeb 学习笔记 10:Element

JavaWeb 学习笔记 10&#xff1a;Element Element 是一个基于 Vue 的前端组件框架&#xff0c;使用它可以快速构建美观的前端页面。 1.快速开始 创建一个简单的 JavaWeb 应用。 添加一个 Html 页面&#xff0c;并在<head>标签中加入 Element 和 Vue 的相关 js 引用&a…

C++学习笔记一: 变量和基本类型

本章讲解C内置的数据类型&#xff08;如&#xff1a;字符、整型、浮点数等&#xff09;和自定义数据类型的机制。下一章讲解C标准库里面定义的更加复杂的数据类型&#xff0c;比如可变长字符串和向量等。 1.基本内置类型 C内置的基本类型包括&#xff1a;算术类型和空类型。算…

进阶指针(四)—— 加强对指针,数组名,sizeof,strlen的理解

✨博客主页&#xff1a;小钱编程成长记 &#x1f388;博客专栏&#xff1a;进阶C语言 &#x1f388;推荐相关博文&#xff1a;进阶C语言&#xff08;一&#xff09;、进阶C语言&#xff08;二&#xff09;、进阶C语言&#xff08;三&#xff09; 进阶指针&#xff08;四&#x…

QT:绘图

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPaintEvent> //绘图事件class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent 0);~Widget();void paintEvent(QPaintEvent *event); //重写绘图事件void timerEve…

GD32F10X ----RTC

1. RTC的简介 STM32 的实时时钟&#xff08;RTC&#xff09;是一个独立的定时器。STM32 的 RTC 模块拥有一组连续计数的计数器&#xff0c;在相应软件配置下&#xff0c;可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC 模块和时钟配置…

格拉姆角场GAF将时序数据转换为图像并应用于东南大学轴承故障诊断(Python代码,CNN模型)

1.运行效果&#xff1a;格拉姆角场GAF将时序数据转换为图像并应用于东南大学轴承故障诊断&#xff08;Python代码&#xff0c;CNN模型&#xff09;_哔哩哔哩_bilibili 环境库 只要tensorflow版本大于等于2.4.0即可运行 2.GAF的内容 GAF是一种用于时间序列数据可视化和特征提…

LLM-TAP随笔——大语言模型基础【深度学习】【PyTorch】【LLM】

文章目录 2.大语言模型基础2.1、编码器和解码器架构2.2、注意力机制2.2.1、注意力机制&#xff08;Attention&#xff09;2.2.2、自注意力机制&#xff08;Self-attention&#xff09;2.2.3、多头自注意力&#xff08;Multi-headed Self-attention&#xff09; 2.3、transforme…

Leetcode 2871. Split Array Into Maximum Number of Subarrays

Leetcode 2871. Split Array Into Maximum Number of Subarrays 1. 解题思路2. 代码实现 题目链接&#xff1a;2871. Split Array Into Maximum Number of Subarrays 1. 解题思路 这一题实现上其实还是比较简单的&#xff0c;就是一个贪婪算法&#xff0c;主要就是思路上需要…

【未解决问题】opencv 交叉编译 ffmpeg选项始终为NO

opencv 打不开视频的原因 在交叉编译时候&#xff0c;发现在 pc 端能用 opencv 打开的视频&#xff0c;但是在 rv1126 上打不开。在网上查了很久&#xff0c;原因可能是 ffmpeg 造成的。 解决opencv源代码编译找不到ffmpeg-CSDN博客 交叉编译 ffmpeg 尝试了一天还是第二个博客…