(二十六)STL vector容器(动态数组)

news2024/9/20 20:02:27

动态数组vector是标准模版库(STL, Stardard Template Library)中的模版,它有着节省空间和使用方便的优势,我们用一个形象的例子来说明:

开学了,有40个学生来报名,想要存储每个同学的姓名,可以使用静态数组存储

开学了,未知有多少个同学,要存储每个同学的姓名,可以使用动态数组存储

所在头文件:#include <vector>

想要定义一个vector容器,有四种方式,也叫做构造(Construction):

  1. vector<Typ> T:定义一个Typ类型的动态数组T
  2. vector<Typ> T(n):定义一个Typ类型的动态数组T,并初始为n
  3. vector<Typ> T(n, x):定义一个Typ类型的动态数组T,并初始化为n项,每一项赋值为x
  4. vector<Typ> T2(T1):定义一个Typ类型的动态数组T2,并复制T1T2

另外在vector容器中还可以释放所占的空间,也叫做析构(Deconstruction):

  1. vector<Typ>().swap(T):释放一个Typ类型的动态数组T所占的空间
  2. T.swap(vector<Typ>()):一样的,释放空间

vector容器中还有很多函数,最常用的有这些:

  1. T.push_back(n):在动态数组T的末尾插入元素n
  2. T.pop_back():删除T的最后一个元素
  3. T.size():返回数组T的长度(返回类型size_t
  4. T.capacity():返回数组T的容量,也就是一共存储了多少个数据,删除的也算(也返回size_t类型)
  5. T.clear():清空数组T的所有元素
  6. T.empty():判断T数组是否为空,是返回true,不是返回false
  7. T.begin():返回T的第一项的地址
  8. T.end():返回T的地址结束符的地址(也就是最后一项的下一项的NULL
  9. T.rbegin():返回T的最后一项的地址
  10. T.rend():返回T的第一项的地址
  11. T.begin()+n:返回T的第n项的地址
  12. T.insert(p, x):在地址为p的元素前插入元素x
  13. T.erase(p):删除地址为p的元素
  14. T.at(n)或者T[n]:返回T的第n项(注意下标)

动态数组的迭代器类型:vector<Typ>::iterator,也可以简写为自动类型auto(Dev-C++使用者点击我)

vector容器有这些遍历方法:

#include <bits/stdc++.h>
using namespace std; 
int main() {
	int n; 
	cin >> n; 
	vector<int> T; 
	for(int i=0; i<n; i++) {
		int m; 
		cin >> m; 
		T.push_back(m); 
	}
	for(int i=0; i<T.size(); i++) { //使用遍历变量遍历
		cout << T[i] << " "; 
	}
	return 0; 
}
#include <bits/stdc++.h>
using namespace std; 
int main() {
	int n; 
	cin >> n; 
	vector<int> T; 
	for(int i=0; i<n; i++) {
		int m; 
		cin >> m; 
		T.push_back(m); 
	}
	for(vector<int>::iterator it=T.begin(); it!=T.end(); it++) { //迭代器遍历
		cout << *it << " "; 
	} // vector<int>::iterator 可以简写为 auto
	return 0; 
}

这是一道直接涉及到动态数组的题目

题目描述
给定一个N个数的数组,M次操作,每次操作为下列操作之一。求最后的数组。
操作1:在第X个数之后插入一个数Y。
操作2:删除第X个数。
输入描述
第一行两个整数N,M(N,M≤1000),N表示数组中一开始有N个数,M表示M次操作。
第二行N个整数,表示原来的数组。
接下来M行,每行第一个数OPT,表示操作类型。
对于操作1,接下来两个数X,Y,表示在第X个数之后插入一个数Y,保证0≤X≤当前数的个数,若X=0,表示在数组开头插入。
对于操作2,接下来一个数X,表示要删除第X个数,保证1≤X≤当前数的个数
输出描述
输出若干个数,表示最后的数组。
样例输入

5 3
1 2 3 4 5
1 1 6
2 1
2 2

样例输出

6 3 4 5

题解

#include <bits/stdc++.h>
using namespace std; 
int main() {
    int n, m; 
    vector<int> v; 
    cin >> n >> m; 
    for(int i=0; i<n; i++) { //输入
        int t; 
        cin >> t; 
        v.push_back(t); 
    }
    for(int i=0; i<m; i++) {
        int opt; 
        cin >> opt; 
        if(opt==1) { //操作一:插入元素
            int x, y; 
            cin >> x >> y; 
            v.insert(v.begin()+x, y); 
        } 
        if(opt==2) { //操作二:删除元素
            int x; 
            cin >> x; 
            v.erase(v.begin()+x-1); 
        }
    }
    for(int i=0; i<v.size(); i++) {
        cout << v[i] << ' '; 
    }
    return 0; 
}

预览:

  • 十九:指针与迭代器
  • 二十:位运算与进制
  • 二十一:联合体(union)
  • 二十二:类(class)
  • 二十三:高精度运算
  • 二十四:算法进阶
  • 二十五:递归
  • 二十六:vector容器
  • 二十七:递推
  • 二十八:set容器
  • 二十九:map容器
  • 三十:栈(stack
  • 三十一:队列(queue
  • 三十二:电脑基础知识
  • 三十三:链表
  • 三十四:树
  • 三十五:图

请添加图片描述

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

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

相关文章

数字验证:一文弄懂UVM的factory机制

如果我们用SystemVerilog构建验证平台&#xff0c;构建好了之后&#xff0c;想改变平台中的某个组件&#xff0c;例如将driver改成driver_new&#xff0c;我们需要重新定义一下driver_new&#xff0c;当然也可以直接从driver继承。但是我们还需要在driver对象例化的地方将drive…

PHP同城派送多区域运营配送小程序源码

&#x1f69a;&#x1f4a8;「同城派送多区域运营小程序」——让每一份需求快速触达&#xff01;&#x1f308;&#x1f680; &#x1f525; 开篇燃爆&#xff1a;同城生活新风尚&#xff0c;一键速达不是梦&#xff01; Hey小伙伴们&#xff0c;你还在为找不到合适的同城服务…

WEB渗透Win提权篇-PowerUp

提权工具合集包&#xff08;免费分享&#xff09;&#xff1a; 夸克网盘分享 往期文章 WEB渗透Win提权篇-提权工具合集-CSDN博客 WEB渗透Win提权篇-RDP&Firewall-CSDN博客 WEB渗透Win提权篇-MSSQL-CSDN博客 WEB渗透Win提权篇-MYSQL-udf-CSDN博客 WEB渗透Win提权篇-Acc…

02-03:原理图与PCB交互以及快速模块化

1原理图与PCB交互 ①在PCB界面&#xff0c;点击工具, 勾选交叉选择模式 ②过滤器只选择元器件 2.按页快速模块化 配合F9快捷键

运放阻抗和噪声(同相放大器的输入/输出阻抗 + 电压跟随器阻抗 + 噪声 +信噪比)

2024-8-27&#xff0c;星期一&#xff0c;21:03&#xff0c;天气&#xff1a;阴雨&#xff0c;心情&#xff1a;晴。培训终于结束啦&#xff0c;开始轮岗了&#xff0c;看了两天PPT&#xff0c;加油加油&#xff0c;继续学习。 今天继续学习第六章运算放大器&#xff0c;主要学…

修改SpringBoot项目中MyBatis的mapper.xml文件的位置

由于MyBatis默认的mapper.xml的扫描位置是resource文件下&#xff0c;但是不可能整个项目的mapper.xml文件都放在resource下&#xff0c;如果文件较少还行&#xff0c;但是如果文件比较多&#xff0c;虽然有插件可以点击跳转&#xff0c;但是每次都这样也太麻烦了&#xff0c;所…

浙商之源——龙游商帮丨龙游商帮的具象文化符号之建筑篇

编撰者&#xff1a;袁勇 [三门源村] 三门源村位于浙江省龙游县石佛乡北部&#xff0c;距县城约28公里。因为进出村庄要经过三道屏障&#xff0c;且穿村而过的溪水又为塔石溪的源头&#xff0c;故称三门源。三门源群山环绕&#xff0c;仅有南面与金衢盆地相接&#xff0c;一泓溪…

无人机 PX4 飞控 | ROS应用层开发:指令(字符串)订阅功能

无人机 PX4 飞控 | ROS应用层开发&#xff1a;指令&#xff08;字符串&#xff09;订阅功能 指令&#xff08;字符串&#xff09;订阅功能代码测试 指令&#xff08;字符串&#xff09;订阅功能 为了通过键盘触发mavros 的不同功能&#xff0c;需要实现一个订阅字符串的功能 该…

【嵌入式开发之网络编程】Socket套接字及TCP、UDP通信的实现

Socket套接字 现有计算机网络体系结构有三种划分形式&#xff1a;OSI七层协议、TCP/IP四层协议结构、五层协议结构。具体介绍参考&#xff1a;【嵌入式开发之网络编程】网络分层、OSI七层模型、TCP/IP及五层体系结构 网络的体系结构 (Network Architecture) 是计算机网络的各…

MySQL索引(二)

MySQL索引(二) 文章目录 MySQL索引(二)MySQL有哪些索引&#xff1f;MySQL的主键是聚簇索引吗&#xff1f;聚簇索引和非聚簇索引的区别什么是覆盖索引什么是回表主键问题 外键约束什么是外键什么是外键约束外键带来的问题 联合索引最左匹配原则如何建立联合索引索引下推 学习地址…

适合 Spring Boot 3.0x的Redis 分布式锁

Spring Boot 中的 Redis 分布式锁 在分布式系统中&#xff0c;多个进程同时访问共享资源时&#xff0c;很容易出现并发问题。为了避免这些问题&#xff0c;我们可以使用分布式锁来保证共享资源的独占性。Redis 是一款非常流行的分布式缓存&#xff0c;它也提供了分布式锁的功能…

Ai+若依(页面调整--去除若依的各种痕迹,采用自己的):【07篇】

页面调整 如果使用若依框架项目做为脚手架,那么我们肯定需要在页面显示中,符合自己公司或者项目的标识才行,需要更换的地方很多,我们依次来解决它 浏览器标签页logo标识、标题 系统页面中的logo标识、标题 去除源码地址 & 文档地址 主题风格和菜单图标 登录名称及背景…

Java GIS开发工具包-GeoTools浅谈

目录 前言 一、关于Geotools 1、GeoTools简介 2、官方仓库 3、使用Geotools的一些项目 二、Geotools架构 1、功能架构 2、Geotools支持的数据格式 三、Geotools科研热点 1、知网信息 2、百度学术 四、总结 前言 地理信息&#xff0c;智联万物。地理信息在我们的生活中…

《机器学习》—— OpenCV 对图片的各种操作(均值、方框、高斯、中值滤波处理)

文章目录 1、对有椒盐噪声的图片进行均值、方框、高斯、中值滤波处理2、给图像边缘增加边框3、对图片进行阈值化操作 1、对有椒盐噪声的图片进行均值、方框、高斯、中值滤波处理 均值滤波 cv2.blur是 OpenCV 库中的一个函数&#xff0c;用于对图像进行均值模糊处理。这个函数通…

【Mysql】通过Keepalived搭建mysql双主高可用集群

一、环境信息 主机名ip操作系统mysql版本VIP&#xff08;虚拟ip&#xff09;hadoop01192.168.10.200centos7_x865.7192.168.10.253hadoop03192.168.10.202centos7_x865.7 二、mysql集群搭建 两台节点&#xff0c;如果未部署mysql服务&#xff0c;部署文档请看【Mysql】mysql…

前端自动导入依赖

前言 开发中通常会有很多导入语句&#xff0c;如何确保一些通用的api和hook无需每次手动导入即可使用。 <script setup lang"ts"> import { ref, reactive } from "vue" import { useRoute, useRouter } from "vue-router" import { log…

C++——string类(1)

### string是C中的一种类&#xff0c;在标准库中的&#xff1b;可以直接对字符串进行一系列操作。 string类类型的构造 1、无参构造&#xff1a; string(); 定义string对象的时候不给值&#xff0c;这个string类的对象里面没有字符&#xff1b; #include<iostream> #in…

VsCode中Jupyter找不到内核的问题

问题描述 之前可以选择内核&#xff08;可能要先 “Python: 选择解释器”&#xff0c;也可能不用&#xff09;&#xff0c;并且是自己检测到 conda 环境中的 Python。 但是后来会突然找不到内核&#xff0c;点击选择内核&#xff0c;会在空白下加载很久&#xff0c;无果。 这…

MIPI联盟D-PHYv1.2规范阅读笔记二之物理层接口协议PPI

本文阅读自eetop.cn_mipi_D-PHY_specification_v1-2.pdf Logical PHY-Protocol Interface Description&#xff08;PHY物理层协议接口描述PPI&#xff09; PHY物理层协议接口被用于连接物理层和通信栈与更高层协议栈之间建立联系。 表 31 定义了物理层协议接口&#xff08;P…

day10JS-this的使用规则

1. this情况总结 开启严格模式&#xff1a; "use strict"; //开启严格模式 1.全局&#xff1a;非严格this--->window &#xff0c;严格 this--->window。 2.普通函数执行&#xff1a;函数名() 非严格this-->window &#xff0c;严格 this--->undefined…