vector类(顺序表)

news2024/9/28 13:21:31

文章目录

    • 1.定义:
    • 接口
    • 成员函数
      • 构造成员函数
      • 析构函数
      • 赋值
    • 2.迭代器
      • 2.1begin()和end()重点
        • 2.1.1应用
          • 2.1.1.1函数调用
        • 2.1.1.2用变量接受迭代器
      • 2.2rbegin()和rend()
        • 2.2.1应用
    • 3.顺序表的访问(增删查检)
      • 3.1operator[]和at
      • 3.2 front()
      • 3.3 back()
    • 4.vector空间增长问题
      • 4.1 size()和capacity()
        • 4.1.1应用
      • vector的扩容机制
      • 4.2 maxsize
      • 4.3 resize()和reserve
      • 4.5shrink_to_fit(缩容)
    • 5.修饰符
      • 5.1push_back(尾插)
        • 5.1.1定义
        • 5.1.2 应用
      • 5.2 pop_back(尾删)
      • 5.3 Insert(指定位置插入)
      • 5.4 erase
      • find(){这个函数可以配套前两个函数使用)
      • 5.5swap()
      • 5.6 clear()
    • vector的使用
      • 应用1
      • 应用2
        • 杨辉三角和二维数组的对比:
          • 二维数组
          • 杨氏三角

1.定义:

在这里插入图片描述
这里顺序表的定义需要示例化:
vector<A类型>名字
这样就定义了一个A类型的顺序表

接口

在这里插入图片描述
使用vector容器需要包含头文件(#include)

成员函数

构造成员函数

【constructor】构造函数声明
在这里插入图片描述

#include <iostream>
#include <vector>
using namespace std;
 
void test() {
	vector<int> s1;//无参构造
	vector<int> s2(5, 1);//构造并初始化5个1
	vector<int> s3(s2);//拷贝构造
	vector<int> s4(s2.begin(), s2.end());//迭代器构造(拷贝s2)
}
 
int main() {
	test();
	return 0;
}

在这里插入图片描述

vector构造时的空间大小取决于使用的构造方法。以下是几种常见的构造方法和它们的空间大小:
默认构造方法:使用无参构造函数创建的vector对象将具有默认的初始容量。这个初始容量可以根据实现而有所不同,但通常情况下是0或者一个小的默认值。
区间构造方法:通过指定一个区间来构造vector对象,例如使用两个迭代器指定的开始和结束位置。这种情况下,vector对象的空间大小将根据给定的区间大小来确定。
元素个数构造方法:通过指定一个元素的个数来构造vector对象。在这种情况下,vector对象的空间大小将与指定的元素个数相等。
拷贝构造方法:通过拷贝一个已有的vector对象来构造新的vector对象。在这种情况下,新的vector对象的空间大小将与原始vector对象的空间大小相同。
请注意,vector对象的实际内存使用可能会随着元素的添加和删除而动态变化。当vector的大小超过当前容量时,vector会自动分配更大的内存空间来容纳新的元

析构函数

在这里插入图片描述

赋值

在这里插入图片描述

2.迭代器

2.1begin()和end()重点

获取第一个数据位置的iterator/const_iterator,获取最后一个数据的下一个位置的iterator/const_iterator

2.1.1应用
2.1.1.1函数调用

在这里插入图片描述

2.1.1.2用变量接受迭代器

变量的定义:
vector::iterator it=v4.begin();
顺序表类型::迭代器类型 变量
在这里插入图片描述
优质写法:使用auto
应用:
auto it =v4.begin();

2.2rbegin()和rend()

获取最后一个数据位置的reverse_iterator,获取第一个数据前一个位置的reverse_iterator

在这里插入图片描述

2.2.1应用

函数调用
在这里插入图片描述
用变量接受迭代器
同上;

3.顺序表的访问(增删查检)

3.1operator[]和at

区别是:【】使用assert来报访问是否越界的问题
at使用抛异常来执行;
抛异常
例子:
在这里插入图片描述
【】的例子
在这里插入图片描述
at的例子
在这里插入图片描述

3.2 front()

std::vector::front
reference front();
const_reference front() const;

返回值:第一个元素的引用
使用示例
在这里插入图片描述
很少用;

3.3 back()

std::vector::back
reference back();
const_reference back() const;

返回值:返回最后一个元素的引用;
使用示例
在这里插入图片描述

4.vector空间增长问题

4.1 size()和capacity()

4.1.1应用

size的应用
在这里插入图片描述
capacity的应用
在这里插入图片描述

vector的扩容机制

// 测试vector的默认扩容机制
void TestVectorExpand()
{
 size_t sz;
 vector<int> v;
 sz = v.capacity();
 cout << "making v grow:\n";
 for (int i = 0; i < 100; ++i) 
 {
 v.push_back(i);
 if (sz != v.capacity()) 
 {
 sz = v.capacity();
 cout << "capacity changed: " << sz << '\n';
 }
 }
}
vs:运行结果:vs下使用的STL基本是按照1.5倍方式扩容
making foo grow:
capacity changed: 1
capacity changed: 2
capacity changed: 3
capacity changed: 4
capacity changed: 6
capacity changed: 9
capacity changed: 13
capacity changed: 19
capacity changed: 28
capacity changed: 42
capacity changed: 63
capacity changed: 94
capacity changed: 141
g++运行结果:linux下使用的STL基本是按照2倍方式扩容
making foo grow:
capacity changed: 1
capacity changed: 2
capacity changed: 4
capacity changed: 8
capacity changed: 16
capacity changed: 32
capacity changed: 64
capacity changed: 128

4.2 maxsize

容器可以开的最大空间。

4.3 resize()和reserve

在这里插入图片描述
注意(易错)
reserve后使用[]q
在这里插入图片描述

4.5shrink_to_fit(缩容)

将容量(capacity)减少到size大小;
尽量少用
原因:异地缩容;在另一个空间建顺序表;

5.修饰符

5.1push_back(尾插)

5.1.1定义

在这里插入图片描述
这里push_back会自动添加size和capacity

5.1.2 应用

二叉树的前序遍历

5.2 pop_back(尾删)

使用例子:
在这里插入图片描述

5.3 Insert(指定位置插入)

std::vector::insert

在这里插入图片描述
由于参数的位置是迭代器;所以使用find()函数来实现;
在这里插入图片描述
解释:在position位置之前添加val
** 注意:这里的postion是迭代器;**

5.4 erase

在这里插入图片描述
注意这里的参数也是迭代器;

find(){这个函数可以配套前两个函数使用)

定义
在这里插入图片描述
三个参数:
起始迭代器;中止迭代器;传输的值
注意
这里的参数和返回值都是迭代器;
find ()函数的使用
find函数只有string自己写了,其他容器都是用的是算法库的中的模板版函数(这个模版函数可以被除string以外容器使用)
string容器需要自己写的原因是:string类中需要查找字符串的功能;

5.5swap()

分类:成员函数,全局函数
成员函数是浅拷贝;全局变量是两个指针的交换
在这里插入图片描述
在这里插入图片描述

5.6 clear()

清理数据(size和指针数组,不清理capacity)
如果在使用clear后还想将capacity改位0时:使用shrink_to_fit()函数将capacity改为0;
在这里插入图片描述
这里的输出不知道是12345还是1 2 3 4 5;

vector的使用

应用1

只出现一次的数字
使用异或来解题;

应用2

杨辉三角形
在这里插入图片描述

杨辉三角和二维数组的对比:
二维数组

在这里插入图片描述

杨氏三角

在这里插入图片描述
两者都可以使用下标来访问,但是两者有本质区别:前者是下标的解引用;后者则是函数的调用;
杨氏三角实现leadcode

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

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

相关文章

Vue的路由使用,Node.js下载安装及环境配置教程 (超级详细)

前言&#xff1a; 今天我们来讲解关于Vue的路由使用&#xff0c;Node.js下载安装及环境配置教程 一&#xff0c;Vue的路由使用 首先我们Vue的路由使用&#xff0c;必须要导入官方的依赖的。 BootCDN - Bootstrap 中文网开源项目免费 CDN 加速服务https://www.bootcdn.cn/ <…

架构核心技术之分布式消息队列

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 今天我们来学习分布式消息队列&#xff0c;分布式消息队列的知识结构如下图。 主要介绍以下内容&#xff1a; 同步架构和异步架构的区别。异步架构的主要组成部分&#xff1a;消息生产者、消息消费者、分布式消息队列…

Vue路由及Node.js环境搭建

一、Vue路由 1.1 定义 Vue路由是指使用Vue Router插件来管理前端应用程序的导航和页面路由的过程。它允许你在单页面应用程序&#xff08;SPA&#xff09;中定义不同的路由路径&#xff0c;并将每个路径映射到相应的组件。 通过使用Vue路由&#xff0c;你可以根据URL的变化加载…

无涯教程-JavaScript - ASIN函数

描述 ASIN函数返回给定数字的反正弦或反正弦,并返回以弧度表示的Angular,介于-π/2和π/2之间。 语法 ASIN (number)争论 Argument描述Required/OptionalNumberThe sine of the angle you want and must be from -1 to 1.Required Notes 如果您希望ASIN函数返回的Angular以…

HUAWEI华为荣耀猎人游戏本V700 i7独显2060(FRD-WFD9)原装出厂Windows10系统工厂模式(含F10还原)

华为HONOR荣耀笔记本原厂系统镜像包&#xff0c;安装恢复时自动创建F10一键智能还原功能 链接&#xff1a;https://pan.baidu.com/s/1_px_3Fr9qEE6jExz1eKKKg?pwdk6uc 提取码&#xff1a;k6uc 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、华为电脑管家等预装程序…

基于springboot高校场馆预订系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

(并查集) 1971. 寻找图中是否存在路径 ——【Leetcode每日一题】

❓ 1971. 寻找图中是否存在路径 难度&#xff1a;简单 有一个具有 n 个顶点的 双向 图&#xff0c;其中每个顶点标记从 0 到 n - 1&#xff08;包含 0 和 n - 1&#xff09;。图中的边用一个二维整数数组 edges 表示&#xff0c;其中 edges[i] [ui, vi] 表示顶点 ui 和顶点 …

select in ()的时候,MySQL会自动按主键自增排序,要是按IN中给定的顺序来取,如何实现呢?

select * from table_name where id in ()的时候&#xff0c;MySQL会自动按主键自增排序&#xff0c;要是按IN中给定的顺序来取&#xff0c;如何实现呢&#xff1f; 比如下面这个查询结果&#xff0c;mysql会默认使用主键id的ASC自增排序结果集&#xff1a; 那么&#xff0c;…

RHEL 8.8 安装部署 Zabbix 6.4 详细过程

文章目录 前言1. 关闭系统防火墙2. 禁用 SELinux 模块3. 配置本地 YUM 源4. 配置 Zabbix 下载源5. 切换 PHP 模块版本6. 安装 Zabbix Server && Frontend && Agent7. 安装配置 MariaDB 数据库8. 为 Zabbix Server 配置数据库9. 启动 Zabbix Server 和 Agent 服…

【Java 基础篇】Java 中的 `wait` 与 `notify` 方法详解

在 Java 中&#xff0c;wait 与 notify 方法是用于线程之间通信的重要工具。它们被用于实现线程的等待与唤醒&#xff0c;以及线程之间的协作。本节将深入介绍这两个方法的使用方式、作用以及一些注意事项。 wait 方法 wait 方法是 java.lang.Object 类的一个实例方法&#x…

知识图谱(4)图算法

基于图有很多任务&#xff0c;比如&#xff1a; 节点分类&#xff1a;预测哪些网站是诈骗网站&#xff1b;关系预测&#xff1a;判断图中两个节点的关系&#xff1b;图分类&#xff1a;分子性质预测&#xff1b;聚类&#xff1a;社交网络分析&#xff0c;将相似用户聚类在一起…

如何选择合适的官文转录供应商

为什么质量不应该是唯一的考虑因素 官文记录必须准确无误——很多重要的程序&#xff08;包括法庭案件审判、严重欺诈调查和尸检调查&#xff09;成功得出结论&#xff0c;可能都依赖于记录的准确性。但是&#xff0c;在选择转录供应商时&#xff0c;还必须考虑更多因素。 官文…

2023Q2全球可穿戴腕带出货量达 4400 万台

全球可穿戴设备市场在2023年第二季度继续保持增长态势&#xff0c;总出货量达到了4400万台&#xff0c;同比增长了6%。这一增长得益于消费者对于可穿戴设备的需求不断增加&#xff0c;以及不同细分市场的需求反弹。 根据市场研究机构 Canalys 的最新报告&#xff0c;全球可穿戴…

阿里测开面试大全(一)附答案完整版

万字长文&#xff0c;建议收藏 1 什么是POM&#xff0c;为什么要使用它&#xff1f; POM是Page Object Model的简称&#xff0c;它是一种设计思想&#xff0c;而不是框架。大概的意思是&#xff0c;把一个一个页面&#xff0c;当做一个对象&#xff0c;页面的元素和元素之间操…

VM虚拟机CentOS7.9x64 LVM硬盘扩容

软件版本&#xff1a;VMWare Workstation14 虚拟机CentOS 7.9X64位 GParted 0.33.0 一、虚拟机安装gparted软件 sudo yum install epel-release sudo yum install gparted sudo yum install yum-utils git gnome-common gcc-c sudo yum-builddep gparted 二、关闭虚拟机&a…

【Java 基础篇】Java Condition 接口详解

Java 提供了一种更灵活和高级的线程协作机制&#xff0c;通过 Condition 接口的使用&#xff0c;你可以更精细地控制线程的等待和唤醒&#xff0c;实现更复杂的线程同步和通信。本文将详细介绍 Java 的 Condition 接口&#xff0c;包括它的基本概念、常见用法以及注意事项。 什…

TS编译器选项​compilerOptions指定编译后文件所在目录

compilerOptions是TS的编译器选项&#xff0c;主要在tsconfig.json文件中用于对ts编译为js文件时进行配置 "compilerOptions" : { 配置项 } 在tsconfig.json中编写如下代码&#xff1a; {// compilerOptions 编译器选项"compilerOptions": {// outDir 用于…

buuctf web [极客大挑战 2019]Upload

上传头像&#xff0c;上传一下&#xff0c;看看能不能成功 抓包&#xff0c;抓取上传时的数据,看看限制条件 改两个地方&#xff0c;符合上传图片的要求&#xff0c;上传试试 一句话木马的<?被扳了 改一下木马的格式 <script language"php">eval($_POST[cm…

[NOIP2016 提高组] 蚯蚓

题目链接 题目很长&#xff0c;题意如下&#xff1a;一开始有n个值&#xff0c;&#xff0c;有m次操作&#xff0c;每次操作选择一个最大的值x&#xff0c;将它分解成两个数&#xff0c;分别为&#xff0c;以及&#xff0c;然后&#xff0c;经过这个操作之后&#xff0c;对除了…

什么是 AirServer?Mac专用投屏工具AirServer 7 .27 for Mac中文破解版百度网盘下载

AirServer 7 .27 for Mac中文免费激活版是一款Mac专用投屏工具&#xff0c;能够通过本地网络将音频、照片、视频以及支持AirPlay功能的第三方App&#xff0c;从 iOS 设备无线传送到 Mac 电脑的屏幕上&#xff0c;把Mac变成一个AirPlay终端的实用工具。 目前最新的AirServer 7.2…