c++修炼之路之vector--标准库中的vector

news2024/12/23 13:13:28

目录

前言

一:vector的简介

二:vector的常用接口

1.构造函数

2.迭代器访问遍历数组 

3.容量接口函数 

4.增删查改接口函数

三:vector常用接口的全部代码 

接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧 

前言

vector是表示一个可变大小的数组的容器,就和数组,顺序表一样,使用连续的空间来存储数据,访问数据,它的使用更加方便高效

一:vector的简介

对于vector简单来说就是一个可变大小的顺序表,就像数组一样,可以使用数组的下标来访问数据,当要新插入数据时,就要新开辟一个数组,将源数组内容 拷贝过去,在完成插入操作等

使用时要包含头文件#include <vector>

二:vector的常用接口

1.构造函数

对于构造函数和string有不同的是 vector可以使用一段迭代器区间来构造

演示代码如下

#include <iostream>
using namespace std;
#include <vector>
#include<string>
int main()
{
	vector<int> v1;//无参构造
	for (auto c : v1)
	{
		cout << c << " ";
	}
	cout << endl;

	vector<int> v2(10, 1);//n个val来构造
	for (auto c : v2)
	{
		cout << c << " ";
	}
	cout << endl;

	vector<int> v3(v2.begin(), v2.end());//使用一段迭代器区间来构造
	for (auto c : v3)
	{
		cout << c << " ";
	}
	cout << endl;

	string str("Hello world");
	vector<int> v4(str.begin(), str.end());//使用一段迭代器区间来构造,可以是任意类型的一段迭代器区间
	for (auto c : v4)
	{
		cout << c << " ";
	}
	cout << endl;

	vector<int> v5(v3);//拷贝构造
	for (auto c : v5)
	{
		cout << c << " ";
	}
	cout << endl;

	return 0;
}

2.迭代器访问遍历数组 

这里用迭代器来遍历数组就和string的一样,主要掌握正向反向迭代器,const对象的使用的const迭代器,有了迭代器就可以使用范围for来遍历数组,这里的迭代器依旧可以理解为指针遍历数组

演示代码如下

vector<int> v1(10, 1);
//三种遍历方式
for (int i = 0; i < v1.size(); i++)
{
	cout << v1[i] << " ";
}
cout << endl;

vector<int>::iterator it = v1.begin();
while (it != v1.end())
{
	cout << *it << " ";
	++it;
}
cout << endl;

vector<int>::reverse_iterator rit = v1.rbegin();//反向迭代器
while (rit != v1.rend())
{
	cout << *rit << " ";
	++rit;
}
cout << endl;

for (auto c : v1)
{
	cout << c << " ";
}
cout << endl;

3.容量接口函数 

对于reserve只是开空间,对于vs是1.5倍扩容,而g++是2倍扩容,如果提前知道要开辟的空间有多大的话,可以使用reserve提前开空间减少扩容带来的消耗,只改变capacity

对于resize是开空间+初始化,改变size,如果resize要开的空间小于size的话,相当于删除数据,但capacity不改变;resize要开的空间大于capacity的话,size和capacity都改变

代码演示 

 

vector<int> v;
v.reserve(50);  // size = 0    capacity 50
v.resize(100,1);     // size = 100  capacity 100
cout << v.size() << endl;
cout << v.capacity() << endl;

4.增删查改接口函数

特别注意尤其对于insert和erase都存在迭代器失效的问题,对于vs是直接报错的,在模拟实现中详细介绍原因和解决办法 

代码演示

vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
for (int i = 0; i < v1.size(); i++)
{
	cout << v1[i] << " ";
}
cout << endl;

v1.pop_back();
for (auto c : v1)
{
	cout << c << " ";
}
cout << endl;

//insert和erase要结合find函数共同完成操作
//vector<int>::iterator pos = find(v1.begin(), v1.end(), 3);
auto pos = find(v1.begin(), v1.end(), 3);
if (pos != v1.end())
{
	v1.insert(pos,4);//3前面插入4
}
for (auto c : v1)
{
	cout << c << " ";
}
cout << endl;

pos= find(v1.begin(), v1.end(), 3);
if (pos != v1.end())
{
	v1.erase(pos);//删除pos位置的值
}
for (auto c : v1)
{
	cout << c << " ";
}
cout << endl;

三:vector常用接口的全部代码 

https://gitee.com/lin-ciyu/cplusplus/blob/master/vector/vector/testcpp.cpp

四:对于vector的常用接口函数的介绍就到这里了,但vector的使用还是较重要的,遇到忘记的接口了,去查查标准文档理解理解就足够了

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

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

相关文章

钉钉OA审批评论接口,如何@ 人并发送通知

钉钉OA审批评论接口&#xff0c;如何 人并发送通 问题描述&#xff1a; 相关接口&#xff1a;https://oapi.dingtalk.com/topapi/process/instance/comment/add 我希望在钉钉oa审批流程中&#xff0c;添加评论的同时通过“”或者其他方式提醒流程发起人去跟进审批工作。 但我…

比起本地渲染,网渲的优势在哪里?渲染100邀请码1a12

网渲的应用很广泛&#xff0c;在建筑设计和室内装修等行业都能看到它的身影&#xff0c;比起本地渲染&#xff0c;它有以下几个优势。 1、资源充足 网渲平台的资源充足&#xff0c;会根据渲染作业的规模和复杂度自动扩展或缩减分配&#xff0c;以达到动态调节的目的&#xff0c…

小米汽车SU7隐藏款曝光!新配色和透明车身亮了 coreldraw教程入门零基础 coreldraw下载 coreldraw2024

刘强东说&#xff0c;论营销&#xff0c;没有任何人能比得过小米。 小米SU7发布会24小时&#xff0c;下定量就超过了蔚来汽车2023年四季度的交付量。 ▲雷军发布的小米SU7 24小时订单量 小米SU7发布会后五天&#xff0c;雷军在北京亦庄工厂亲自交付了第一批创世版本小米SU7&a…

【性能测试】接口测试各知识第4篇:Jmeter 八大元件及执行顺序,学习目标【附代码文档】

接口测试完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;接口测试&#xff0c;学习目标学习目标,2. 接口测试课程大纲,3. 接口学完样品,4. 学完课程,学到什么,5. 参考:,1. 理解接口的概念。学习目标&#xff0c;RESTFUL1. 理解接口的概念,2.什么是接口测试…

《综合品酒师》培训刷新纪录:FENDI CLUB精酿啤酒点亮行业里程碑

导语&#xff1a;在璀璨的品酒文化星空中&#xff0c;一颗新星正悄然升起&#xff0c;它就是云仓酒庄。近日&#xff0c;云仓酒庄成功举办的《综合品酒师》培训活动不仅刷新了大世界基尼斯纪录&#xff0c;更以其与众不同的FENDI CLUB精酿啤酒品鉴课程引起了品酒新风尚。这一盛…

TCP的一些功能详述

文章制作不易&#xff0c;望各位大佬多多点赞&#xff0c;球球各位啦&#xff01;&#xff01;&#xff01;&#xff01; 目录 1.TCP的简介 2.TCP协议中部分数据的理解 1.端口号 2.序列号 3.四位首部长度 4.6位保留位 5. 16位校验和 6.数据&#xff08;TCP的载荷&#…

upload-labs第九十关

第九关 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {$deny_ext array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml"…

HarmonyOS Next 悬浮窗拖拽和吸附动画

介绍 本示例使用position绝对定位实现应用内悬浮窗&#xff0c;并且通过animateTo结合curves动画曲线实现悬浮窗拖拽跟手和松手吸附边缘的弹性动画效果。 效果图预览 使用说明 按住悬浮窗可以拖拽&#xff0c;松开后悬浮窗自动靠左或靠右&#xff0c;如果悬浮窗超出内容区上…

【C++】深度解析--拷贝构造函数(从0开始,详解浅拷贝到深拷贝,小白一看就懂!!!)

目录 一、前言 二、拷贝构造函数 &#x1f34e;概念解析 &#x1f95d;特性解析 &#x1f4a6;为什么拷贝构造函数使用传值方式会引发无穷递归调用&#xff1f; &#x1f4a6;为什么拷贝构造函数的形参中要加入 const 修饰 &#x1f4a6;若未显式定义&#xff0c;编译器会生…

c语言,单链表的实现----------有全代码!!!!

1.单链表的定义和结构 单链表是一种链式的数据结构&#xff0c;它用一组不连续的储存单元存反线性表中的数据元素。链表中的数据是以节点的形式来表示的&#xff0c;节点和节点之间相互连接 一般来说节点有两部分组成 1.数据域 &#xff1a;数据域用来存储各种类型的数据&…

深入理解同步与异步编程及协程管理在Python中的应用

文章目录 1. 同步与异步函数的对比1.1 同步函数1.2 异步函数1.3 对比 2. 管理多个协程与异常处理2.1 并发执行多个协程2.2 错误处理2.3 任务取消 本文将探索Python中同步与异步编程的基本概念及其区别。还会详细介绍如何使用asyncio库来有效管理协程&#xff0c;包括任务的创建…

一文读懂uniapp中的tabBar底部导航

目录 1. 基本知识2. Demo 1. 基本知识 UniApp 中的 tabBar 是用来在应用程序底部显示可切换的选项卡的组件&#xff0c;通常用于实现底部导航栏 允许用户通过点击不同的选项卡来切换应用程序的不同页面或功能模块 其代码如下&#xff1a; "tabBar":{"color&q…

UOS系统-mips架构---Java环境安装

平时都是在windows系统上安装的java环境&#xff0c;今天需要在uos系统安装java1.8的环境&#xff0c;记录一下安装过程。 &#xff08;以下均在root权限下运行&#xff09; 一、查找java1.8 jdk版本 apt search openjdkopenjdk-8-jdk/未知,未知 1.8.0.212-2deepin mips64el O…

车载摄像头画质增强解决方案,赋能智能驾驶新时代

在智能化浪潮席卷汽车产业的今天&#xff0c;车载摄像头作为智能驾驶的“眼睛”&#xff0c;其画质清晰度直接关系到车辆感知环境的准确性和驾驶的安全性。然而&#xff0c;面对复杂多变的行车环境&#xff0c;如何确保车载摄像头在不同场景下都能呈现出高质量的图像&#xff0…

分布式调度平台xxl-job

1.xxl-job介绍 xxl-job 是一个轻量级分布式任务调度框架&#xff0c;支持动态添加、修改、删除定时任务&#xff0c;支持海量任务分片执行&#xff0c;支持任务执行日志在线查看和分页查询&#xff0c;同时支持任务失败告警和重试机制&#xff0c;支持分布式部署和高可用。xxl…

一文弄懂Seaborn绘制热力图

1. 引言 在本文中&#xff0c;我们将使用Seaborn库来以heatmap热力图的形式来表示数据。我们将重点介绍如何创建它&#xff0c;以及如何更改其颜色&#xff0c;调整对应字体大小等等。 闲话少说&#xff0c;我们直接开始吧&#xff01; 2. 什么是热力图&#xff1f; Heatma…

Python 数学应用(四)

原文&#xff1a;zh.annas-archive.org/md5/123a7612a4e578f6816d36f968cfec22 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第十一章&#xff1a;其他主题 在本章中&#xff0c;我们将讨论一些在本书前几章中没有涉及的主题。这些主题大多涉及不同的计算方式以及优…

向量数据库与图数据库:理解它们的区别

作者&#xff1a;Elastic Platform Team 大数据管理不仅仅是尽可能存储更多的数据。它关乎能够识别有意义的见解、发现隐藏的模式&#xff0c;并做出明智的决策。这种对高级分析的追求一直是数据建模和存储解决方案创新的驱动力&#xff0c;远远超出了传统关系数据库。 这些创…

C代码编译过程与进程内存分布

C代码编译过程 在这篇文章中&#xff0c;我们将探讨C语言代码的编译流程以及进程在运行时的内存布局。编译过程通常包括几个关键步骤&#xff1a;预处理、编译、汇编和链接。 预处理阶段主要是处理源代码文件中的宏定义、头文件包含和条件编译指令。在此阶段&#xff0c;编译…

ping命令的使用

一、实验环境 同实验案例分析ARP解析过程环境。 二、需求描述 熟悉 ping 命令的用法并熱悉 ping 命令的各种参数 三、推荐步骤 分别 ping 一个存在的和不存在的IP地址&#xff0c;观察返回的信息分别测试 ping 命令的相关参数。 四、实验步骤 1.ping 一个存在的和不存在…