STL容器之vector基本操作

news2024/9/8 22:53:43

目录

vector基本操作

vector构造函数

 vector的遍历操作

1.重载[ ]进行遍历。

2.使用迭代器进行遍历。

3.使用范围for循环进行遍历。

4.使用at成员函数进行遍历 。

vector空间增长

1.size:获取当前元素的个数。

2.capacity:获取能存储的元素的个数。

3.empty:判断是否为空。

4.resize:改变size和capacity。

5.reserve:改变capacity。

vector增删查改

1.push_back:尾插。

2.pop_back:尾删。

 3.find:查找,这个函数不是vector类中的成员函数,而是算法模块中的函数。

 4.insert,在某一位置插入元素。

5.erase,删除某一位置的元素或者删除全部的元素。

6.clear,清除所有的元素,与erase删除所有的元素功能类似。


在前几期我们学习了STL容器中的string类,string类其实可以理解为是一个数组,但是数组的每个元素只能存放字符。从本期开始,我们将学习C++中的下一个容器vector,vector也可以理解是一个数组,每个元素的类型是可以自己定义的。

vector基本操作

vector构造函数

1.全缺省的构造函数:

2.可以指定元素和个数进行初始化

3.拷贝构造函数

4.使用迭代器区间进行初始化构造 

 代码如下:

void test1()
{
	vector<int> v;
	vector<int> v1(10, 5);
	vector<int> v2(v1);
	vector<int> v3(v2.begin(), v2.end());
}

截图如下:

 

 vector的遍历操作

1.重载[ ]进行遍历。

代码如下:

vector<int> v3(v2.begin(), v2.end());
	//重载[]进行遍历
	for (size_t i = 0; i < v3.size(); i++)
	{
		cout << v3[i] << " ";
	}

截图如下:

2.使用迭代器进行遍历。

代码如下:

//使用迭代器进行遍历
	vector<int>::iterator it = v3.begin();
	while (it != v3.end())
	{
		cout << *it << " ";
		it++;
	}

截图如下:

注意:反向迭代器的使用和string类的反向迭代器使用方法类似,迭代器++即可。 

3.使用范围for循环进行遍历。

代码如下:

//范围for循环,本质其实就是迭代器进行遍历
	for (auto e : v3)
	{
		cout << e << " ";
	}

截图如下:

4.使用at成员函数进行遍历 。

代码如下:

//使用at成员函数进行遍历
	for (int i = 0; i < v3.size(); i++)
	{
		cout << v3.at(i) << " ";
	}

截图如下: 

vector空间增长

1.size:获取当前元素的个数。

代码如下:

vector<int> v1(10, 3);
cout << v1.size() << " ";

截图如下:
 

2.capacity:获取能存储的元素的个数。

代码如下:

vector<int> v1(10, 3);
cout << v1.capacity() << " ";

截图如下:

3.empty:判断是否为空。

代码如下:

vector<int> v1(10, 3);
cout << v1.empty() << " ";

截图如下:

4.resize:改变size和capacity。

代码如下:

vector<int> v(10, 3);
v.resize(20);

截图如下: 

resize之后的空间如果大于原来的空间,则进行扩容。

扩容之后:

 

resize会对扩容的空间进行初始化。 

如果resize之后的空间小于原来的空间,不会进行缩容,但是会删掉原来的元素。

代码如下:

vector<int> v(10, 3);
v.resize(5);

截图如下:

我们发现知识size的大小变化,容量capacity并没有发生变化。

5.reserve:改变capacity。

如果reserve之后的空间大小大于原来的空间大小。则进行扩容。

代码如下:

vector<int> v2(5, 3);
v2.reserve(10);

截图如下:

size不会改变,只是改变了容量capacity。

如果reserve之后的空间小于之前的空间,不会发生任何变化,capacity和size都不会发生变化。

代码如下:

vector<int> v3(5, 3);
v3.reserve(2);

截图如下:

可见,reserve只能用于扩容。resize也用于扩容,也可以删除容器中的元素。

vector增删查改

1.push_back:尾插。

 代码如下:

vector<int> v3(5, 3);
v3.push_back(4);

截图如下:

2.pop_back:尾删。

代码如下:

vector<int> v3(5, 3);
v3.push_back(4);
v3.pop_back();

截图如下:

         

 3.find:查找,这个函数不是vector类中的成员函数,而是算法模块中的函数。

如果查找到了返回的是当前位置的迭代器,如果没有查找到,返回的是最后一个元素位置的下一个位置的迭代器。

代码如下:

	vector<int> v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	vector<int>::iterator it = find(v3.begin(),v3.end(),5);
	if (it != v3.end())
	{
		cout << "找到了!" << endl;
	}

 截图如下:

 4.insert,在某一位置插入元素。

 代码如下:

    vector<int> v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	vector<int>::iterator it = find(v3.begin(),v3.end(),5);
	if (it != v3.end())
	{
		cout << "找到了!" << endl;
		v3.insert(it, 6);
	}

截图如下:

注意:insert函数的使用如过要往某一位置插入元素,应该传这个位置的迭代器。

5.erase,删除某一位置的元素或者删除全部的元素。

注意,也应该传当前位置的迭代器或者整个容器的迭代器区间。

删除某一位置元素: 

代码如下:

    vector<int> v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	vector<int>::iterator it = find(v3.begin(),v3.end(),5);
	v3.erase(it);

截图如下: 

删除全部元素:

代码如下:

	vector<int> v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	v3.erase(v3.begin(), v3.end());

截图如下:

 

6.clear,清除所有的元素,与erase删除所有的元素功能类似。

代码如下:

    vector<int> v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	vector<int>::iterator it = find(v3.begin(),v3.end(),5);
	v3.erase(it);
	v3.clear();

截图如下:

以上便是vector的重点基本操作,与string的函数是类似的,一通则百通。

本期内容到此结束^_^

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

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

相关文章

ceres在优化过程中保持指定参数块不变

ceres在优化过程中保持指定参数块不变 在solve前利用SetParameterBlockConstant()设置想固定不变的参数块 example: //添加误差方程 ceres::CostFunction* cost_function nullptr;cost_function BundleAdjustmentGCPsCostFunction::Create(px, py, ptGCP.second.x_c, ptGC…

kettle分页抽取数据

背景 kettle抽取数据大家还是比较熟悉的&#xff0c;kettle在抽取数据的时候会开启很多通道&#xff0c;同时抽取&#xff0c;但是我现在遇到一个场景&#xff1a; 从一个mysql数据库里获取“已办”状态的数据id&#xff0c;然后拿这些id去一个oracle数据库里查询&#xff0c…

CCNP课程实验-06-EIGRP-Trouble-Shooting

目录 实验条件网络拓朴 环境配置开始排错错误1&#xff1a;没有配置IP地址&#xff0c;IP地址宣告有误错误2&#xff1a;R3配置了与R1不同的K值报错了。错误3&#xff1a;R4上的AS号配置错&#xff0c;不是1234错误4&#xff1a;R2上配置的Key-chain的R4上配置的Key-chain不一致…

3.7 THREAD SCHEDULING AND LATENCY TOLERANCE

线程调度严格来说是一个实现概念。因此&#xff0c;它必须在特定硬件实现的背景下进行讨论。在迄今为止的大多数实现中&#xff0c;分配给SM的块被进一步分为32个称为warps的线程单元。warps的大小是特定于实现的。warps不是CUDA规范的一部分&#xff1b;然而&#xff0c;了解w…

python+playwright 学习-1.环境准备与快速开始

前言 说到 web 自动化&#xff0c;大家最熟悉的就是 selenium 了&#xff0c;selenium 之后又出现了三个强势的框架Puppeteer、CyPress、TestCafe&#xff0c; 但这3个都需要掌握 JavaScript 语言&#xff0c;所以只是少部分人在用。 2020年微软开源一个 UI 自动化测试工具 P…

基于供需算法优化的Elman神经网络数据预测 - 附代码

基于供需算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于供需算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于供需优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针…

scala 安装和创建项目

Scala&#xff0c;一种可随您扩展的编程语言&#xff1a;从小型脚本到大型多平台应用程序。Scala不是Java的扩展&#xff0c;但它完全可以与Java互操作。在编译时&#xff0c;Scala文件将转换为Java字节码并在JVM&#xff08;Java虚拟机&#xff09;上运行。Scala被设计成面向对…

[De1ctf 2019]SSRF Me

目录 具体做题分析&#xff1a; 字符串拼接&#xff1a; 哈希拓展攻击&#xff1a; 点开是一段flask代码&#xff0c;经过还原后格式如下&#xff1a; #!/usr/bin/env python# encodingutf-8from flask import Flask, requestimport socketimport hashlibimport urllibimpo…

IDEA无公网环境ssh远程访问本地Linux服务器进行开发

文章目录 1. 检查Linux SSH服务2. 本地连接测试3. Linux 安装Cpolar4. 创建远程连接公网地址5. 公网远程连接测试6. 固定连接公网地址7. 固定地址连接测试 本文主要介绍如何在IDEA中设置远程连接服务器开发环境&#xff0c;并结合Cpolar内网穿透工具实现无公网远程连接&#xf…

P5534 【XR-3】等差数列————C++、C

目录 【XR-3】等差数列题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 解题思路Code运行结果 【XR-3】等差数列 题目描述 小 X 给了你一个等差数列的前两项以及项数&#xff0c;请你求出这个等差数列各项之和。 等差数列&#…

深度解析分布式锁及实现方案

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

告别内存容量焦虑,光威龙武系列DDR5内存条48GB才799

新年很多朋友又准备新装机或者升级内存了&#xff0c;我比较推荐直接用DDR5大容量的内容&#xff0c;像是光威龙武系列DDR5内存条性价比就非常高&#xff0c;能够满足专业玩家、创作者和高性能计算机用户的需求。这款涵盖多种存储规格&#xff0c;包括6400MHZ 242和6800MHZ 162…

【Vue3】2-5 : 指令系统与事件方法及传参处理

本书目录&#xff1a;点击进入 一、标签属性中的使用 - 指令系统 1.1 那么模板语法是否可以在标签属性中进行使用呢? ▶ 当然可以&#xff1a;使用 指令系统 二、指令系统 2.1 v-bind 2.2 v-on 三、实战 3.1 methods 选项 3.2 $event语法 一、标签属性中的使用 - 指令…

vue+springboot项目上传部署tomcat

下载及安装Tomcat 进入tomcat官网&#xff0c;Tomcat官网 选择需要下载的版本&#xff0c;点击下载下载路径一定要记住&#xff0c;并且路径中尽量不要有中文 下载后是压缩包 .zip&#xff0c;解压后 tomcat系统各个文件夹目录是什么意义&#xff1a; bin&#xff1a;放置的是…

有趣的前端知识(二)

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 文章目录 推荐阅读HTML元素元素属性头部元素列表元素区块元素表单元素 颜色字符实体 HTML元素 …

即时设计:设计稿与PPT完美结合,让您的创意作品更具影响力

PPT助手 更多内容 在设计领域&#xff0c;将设计稿与PPT结合起来&#xff0c;可以让您的作品更具吸引力和影响力。为了满足这一需求&#xff0c;我们向您推荐一款强大的设计工具&#xff0c;它可以将设计稿导出为PPT文件&#xff0c;支持线上预览和编辑&#xff0c;让您的创意…

Spring学习 Spring AOP

4.Spring AOP 4.1.为什么要学习AOP? 案例&#xff1a;有一个接口Service有一个addUser方法&#xff0c;在调用addUser(被调用时打印调用前的毫秒数与调用后的毫秒数&#xff09;&#xff0c;其实现为&#xff1a; Service public class UserServiceImpl implements UserServi…

环信IM Demo登录方式如何修改为自己项目的?

在环信即时通讯云IM 官网下载Demo&#xff0c;本地运行只有手机验证码的方式登录&#xff1f;怎么更改为自己项目的Appkey和用户去进行登录呢&#xff1f; &#x1f447;&#x1f447;&#x1f447;本文以Web端为例&#xff0c;教大家如何更改代码来实现 1、 VUE2 Demo vue2…

2023十大最具商业影响力量子公司 | 光子盒年度系列

量子技术以其广泛的应用范围和对多个领域的深远影响&#xff0c;是当之无愧的“通用底座”技术&#xff0c;其潜在的产业变革力正在展现&#xff0c;尽管当前量子技术与人工智能或虚拟现实等技术领域相比&#xff0c;量子对大多数人来说还有些“看不透”。 2023年&#xff0c;量…

C#实现个人账本管理系统

git地址&#xff1a;https://gitee.com/myshort-term/personal-ledger-management-system 1.系统简介 LedgerManagementSystem是一个小型的个人账本管理系统&#xff0c;可对收支项目进行增加、删除、修改、查询以及导入和导出。可对每日的各类收支项目进行汇总并查看和修改收…