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

目录

前言

一: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的使用还是较重要的,遇到忘记的接口了,去查查标准文档理解理解就足够了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一个基于单片机内存管理-开源模块

概述 此模块是一位大佬写的应用于单片机内存管理模块mem_malloc&#xff0c;这个mem_malloc的使用不会产生内存碎片&#xff0c;可以高效利用单片机ram空间。 源码仓库&#xff1a;GitHub - chenqy2018/mem_malloc mem_malloc介绍 一般单片机的内存都比较小&#xff0c;而且没…

单调栈基础题

739. 每日温度 问题描述 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。…

模型融合1

一、模型融合:与集成算法一样,都是训练多个评估器,并将多个评估器以某种方式结合起来解决问题的机器学习办法。但是区别是模型融合能够再经典集成模型的基础上进一步提升分数,使用模型融合ji融合:与集成算法一样,都是训练多个评估器,并将多个评估器以某种方式结合起来解…

[SystemVerilog]常见设计模式/实践

常见设计模式/实践 RTL 设计&#xff08;尤其是 ASIC&#xff09;的最终目标是制作出最小、最快的电路。为此&#xff0c;我们需要了解综合工具如何分析和优化设计。此外&#xff0c;我们还关注仿真速度&#xff0c;因为等待测试运行实际上是在浪费工程精力。虽然综合和仿真工…

java项目实战之图书管理系统(1)

✅作者简介&#xff1a;大家好&#xff0c;我是再无B&#xff5e;U&#xff5e;G&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;再无B&#xff5e;U&#xff5e;G-CSDN博客 1.背景 图书管理系统是一种用于管理图书…

STC89C52学习笔记(十二)

STC89C52学习笔记&#xff08;十二&#xff09; 一、AD/DA 1.定义 AD能够将模拟信号转化为数字信号&#xff0c;DA能够将数字信号转化为模拟信号。 2.两种类型的DA转换器 &#xff08;1&#xff09;PWM型DA滤波器 由于PWM是通过脉冲调制的方法来调整的&#xff0c;低通滤…

【机器学习】数学基础详解

线性代数&#xff1a;构建数据的骨架 数学对象 标量&#xff08;Scalar&#xff09; 标量是最基本的数学对象&#xff0c;代表了单个的数值&#xff0c;无论是整数还是实数。在机器学习中&#xff0c;标量可以用来表示一个模型的单个参数&#xff0c;如偏差&#xff08;bias&…

学习大数据,所需要的java(Maven)基础(2)

文章目录 Maven核心概念统一管理目标jar包的版本仓库生命周期插件和目标 继承为什么需要继承机制创建父工程在子工程中引用父工程在子工程中引用父工程在父工程中管理依赖 聚合为什么要使用聚合如何配置聚合 Maven酷站Maven生产环境所遇到的问题jar未下载完成jar包冲突问题 Mav…

ActiveMQ入门案例(queue模式和topic模式)

目录 前言&#xff1a;为什么使用消息中间件&#xff1f; 异步通信 缓冲 解耦 前提&#xff1a;安装并启动activemq 一、点对点&#xff08;point to point&#xff0c; queue&#xff09; 1.1 创建maven项目 1.2 Pom依赖 1.2 JmsProduce 消息生产者 1.3 JmsConsumer…

伺服驱动器算法入门的一些建议和书籍推荐

希望此篇文章对想从事伺服驱动器的研发工作的一些刚刚入门的同学一些建议。 针对伺服驱动器的研发工作涉及的知识和需要掌握的技能主要分为两部分&#xff0c;第一是原理部分、第二是工程实践部分。原理部分的学习在此主要推荐大家查看一些入门书籍&#xff0c;本文章中也对书籍…

iOS------SDWebImage源码

一&#xff0c;简介 一个异步图片下载及缓存的库 特性&#xff1a; 一个扩展UIImageView分类的库&#xff0c;支持加载网络图片并缓存图片异步图片下载器异步图片缓存和自动图片有效期限管理支持GIF动态图片支持WebP背景图片减压保证同一个URL不会再次下载保证无效的URL不会…

Linux 目录结构与基础查看命令

介绍 目录结构如下 /bin&#xff1a;存放着用户最经常使用的二进制可执行命令&#xff0c;如cp、ls、cat等。这些命令是系统管理员和普通用户进行日常操作所必需的。 /boot&#xff1a;存放启动系统使用的一些核心文件&#xff0c;如引导加载器&#xff08;bootstrap loader…

Linux学习笔记之9(消息队列)

Linux learning 1、引言2、创建一个消息队列3、发送和接受消息3.1、发送消息3.1、接收消息 4、删除一个消息队列5、例程 1、引言 消息队列&#xff08;message queue&#xff09;也是进程之间通信的一种方式&#xff0c;相比于共享内存的通信方式&#xff0c;消息队列也有类型…

构建BTI的编译工具支持

BTI分支目标识别精讲与实践系列 思考 1、什么是代码重用攻击&#xff1f;什么是ROP攻击&#xff1f;区别与联系&#xff1f; 2、什么是JOP攻击&#xff1f;间接分支跳转指令&#xff1f; 3、JOP攻击的缓解技术&#xff1f;控制流完整性保护&#xff1f; 4、BTI下的JOP如何…

2024 Guitar Pro 8.1.2-27 (x64) win/mac中文激活版破解版

吉他爱好者必备神器&#xff1a;Guitar Pro v8.1.1 Build 17深度解析 随着数字音乐制作和学习的日益普及&#xff0c;越来越多的吉他爱好者开始寻找能够帮助他们提升技能、创作音乐的专业工具。在众多吉他制作软件中&#xff0c;Guitar Pro因其强大的功能和易用的界面备受推崇…

001vscode为什么设置不了中文?

VSCode中文插件安装 在VSCode中设置中文的首要步骤是安装“Chinese (Simplified) Language Pack for Visual Studio Code”扩展插件。这一过程十分简单&#xff0c;只需打开VSCode&#xff0c;进入扩展市场&#xff0c;搜索“ Chinese (Simplified) Language Pack ”然后点击…

EasyUI Jquery 学习笔记 —— Window(窗口)详细版

1. Window(窗口) 1.1 Messager 消息框 通过 $.messager.defaults 重写默认的 defaults。 消息框(messager)提供不同样式的消息框,包括警示(alert)、确认(confirm)、提示(prompt)、进展(progress)等等。所有的消息框都是异步的。用户可以在与消息框交互后使用回…

初识C++ · 类和对象(中)

目录 1 类的6个默认成员函数 2 构造函数 3 析构函数 3 拷贝构造函数 1 类的6个默认成员函数 class Date { public:private:}; 这是一个空类&#xff0c;试问里面有什么&#xff1f; 可能你会觉得奇怪&#xff0c;明明是一个空类&#xff0c;却问里面有什么。其实一点也不…

HLOOKUP函数结合数据验证实现的动态图表

小伙伴们&#xff0c;大家好啊&#xff01;今天我们分享一个使用HLOOKUP函数结合数据验证实现的动态图表技巧&#xff1b; 接下来我们具体说说操作步骤吧。 步骤1&#xff1a;选中A列的【路口车辆通过数】单元格区域&#xff0c;复制粘贴后到右边的空白区域&#xff0c;如I列…

通过调用Vcenter-Api获取Vcenter中服务器信息

通过调用Vcenter-Api获取Vcenter中服务器信息 文章目录 通过调用Vcenter-Api获取Vcenter中服务器信息1. 获取Vmware API帮助文档2. 获取访问凭证3. 获取服务器清单4. 获取服务器更多信息5. 获取虚机更多信息6. 获取磁盘信息7. 获取操作系统相关 1. 获取Vmware API帮助文档 htt…