27.【C/C++ 最全vector数组的用法 (详解)】

2023-05-16

vector动态数组

  • (一)、什么是vector?
  • (二)、vector的作用是什么
  • (三)、经典用法:
  • 1.vector函数的定义:
        • 代码展示:
        • 效果展示:
  • 2.vector的初始化:
      • 1.vector<数据类型> 函数名; 初始化为空
      • 2.vector<数据类型> 函数名(a,b).定义a个空间,都初始化为b。
      • 3.vector<数据类型> 函数名1=函数名2. 把动态数组2复制给动态数组1。
      • 4.vector<数据类型> 函数名1(函数名2.begin(),函数名2.end()). 把动态数组2复制给动态数组1。
      • 5.vector<数据类型> 函数名(a,a+sizeof(a)/sizeof(数据类型)),把普通数组a复制给动态数组。
      • ==========================================
        • 代码展示:
        • 效果展示:
  • 3.vector的简单属性
    • 1.【动态数组的访问下标】
    • 2.【动态数组的访问at函数】
    • 3.【动态数组的长度】
    • 4.【获取动态数组第一个元素】
    • 5.【获取动态数组最后一个元素】
    • 6.【判断动态数组是否为空】
    • 7.【动态数组的交换】
    • 8.【动态数组元素的清空】
    • ====================================
        • 代码展示:
        • 效果展示:
  • 4.vector的插入与删除
    • 1.【单尾部插入】
    • 2.【多元插入】 从哪插 插什么
    • 3.【普通数组插入动态数组】
    • 4.【单尾部删除元素】
    • 5.【多元删除】
    • 6.vector的遍历(for)
    • 7.【迭代遍历】
    • ====================================
        • 代码展示:
        • 效果展示:
  • (四)、实战项目
        • 代码展示:
    • 1.**第一个**经典列题:(课堂刷题的删除与插入)
        • 效果展示:
    • 2.**第二个**经典列题:(进行两个整形数组合并的问题)
        • 代码展示:
        • 效果展示:

(一)、什么是vector?

Vector类 是在 java 中可以实现自动增长的对象数组,vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。

(二)、vector的作用是什么

vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。[1]

(三)、经典用法:

1.vector函数的定义:

代码展示:

#include <vector>
using namespace std;
int main()
{
    int a[10];            //正常定义      
    vector<int> str_a;    //vector 定义
    char b[10];
    vector<char> str_b;
    float c[10];
    vector<float> str_c;
}

效果展示:

在这里插入图片描述

2.vector的初始化:

1.vector<数据类型> 函数名; 初始化为空

2.vector<数据类型> 函数名(a,b).定义a个空间,都初始化为b。

3.vector<数据类型> 函数名1=函数名2. 把动态数组2复制给动态数组1。

4.vector<数据类型> 函数名1(函数名2.begin(),函数名2.end()). 把动态数组2复制给动态数组1。

5.vector<数据类型> 函数名(a,a+sizeof(a)/sizeof(数据类型)),把普通数组a复制给动态数组。

==========================================

代码展示:

#include <vector>
using namespace std;
int main()
{
 int a[5] = {1,2,3,4,5};
 vector<int> str_a; //初始化为空  
 vector<int> str_a1(4, 88); // 定义四个元素,每个元素的值为88;
 vector<int> str_a2 = str_a1; //把a1的值复制给a2;
 vector<int> str_a3(str_a1.begin(), str_a1.end()); //把a1的值复制给a2;
 vector<int> str_a4(a, a + sizeof(a)/sizeof(int)); //复制正常数组的初始化
 return 0;
}

效果展示:

在这里插入图片描述

3.vector的简单属性

1.【动态数组的访问下标】

函数名[n],   n就是访问第几个元素

2.【动态数组的访问at函数】

函数名.at(n),   n就是访问第几个元素

3.【动态数组的长度】

函数名.size(),     获取长度

4.【获取动态数组第一个元素】

函数名.front()

5.【获取动态数组最后一个元素】

函数名.back()

6.【判断动态数组是否为空】

函数名.empty()    ,假如是返回true.

7.【动态数组的交换】

函数名1.swap(函数名2)    把俩函数的内容交换

8.【动态数组元素的清空】

	函数名.clear()

====================================

代码展示:

#include <vector>
#include <iostream>
using namespace std;
int main()
{
 int a[5] = {1,2,3,4,5};
 vector<int> str_a; //初始化为空  
 vector<int> str_a1(4, 88); // 定义四个元素,每个元素的值为88;
 vector<int> str_a2 = str_a1; //把a1的值复制给a2;
 vector<int> str_a3(str_a1.begin(), str_a1.end()); //把a1的值复制给a2;
 vector<int> str_a4(a, a + sizeof(a)/sizeof(int)); //复制正常数组的初始化
 int a5 = str_a4[2]; //vector 动态数组的访问,用下标
 int b = str_a4.at(2); // 利用at函数,也就是下下标
 cout << "a=" << a5 << " " << "b=" << b << endl;
 cout << "str_a4的长度为:" << str_a4.size() << endl; //获取长度,
 cout << "str_a4的第一个元素为:" << str_a4.front() << endl; // 获取第一个元素
 cout << "str_a4的第一个元素为:" << str_a4.back() << endl; //获取最后一个元素
 bool p = str_a4.empty(); //判断是否为空
 str_a4.swap(str_a1);
 //str_a4.clear(); //对数组元素清空
 return 0;
}

效果展示:

在这里插入图片描述
在这里插入图片描述

4.vector的插入与删除

1.【单尾部插入】

函数名.push_back(a),    向尾部插入一个元素a,只能一个个插入,且只能在尾部。

2.【多元插入】 从哪插 插什么

函数名1.insert(函数名1.begin(),a),   向头部插入一个元素a.

函数名1.insert(函数名1.end(),n,a),向尾部插入n个元素 a.

3.【普通数组插入动态数组】

	函数名1.insert(函数名1.begin(),普数组名,普数组名+sizeof(普数组名)
	/sizeof(函数类	型))

	从哪开始  普通数组首位置,普通数组末位置

4.【单尾部删除元素】

函数名.pop_back()     删除最后一个元素

5.【多元删除】

	函数名.(函数名.begin(),函数名.begin()+n)

	 从哪开始,删除几个.(只能是begin 和end不能换成数字)

6.vector的遍历(for)

  for (int i = 0; i < 函数名.size(); i++) //遍历
 {
  cout << 函数名[i] << " ";
 }

7.【迭代遍历】

vector<函数类型>::iterator itor;   
 for (itor = 函数名.begin(); itor != 函数名.end(); itor++)
 {
  cout << *itor << " ";
 }

====================================

代码展示:

#include <vector>
#include <iostream>
using namespace std;
int main()
{
 int a[20] = {1,2,3,4,5};
 vector<int> str_a; //初始化为空  
 vector<int> str_a1(4, 88); // 定义四个元素,每个元素的值为88;
 vector<int> str_a4(a, a + sizeof(a)/sizeof(int)); //复制正常数组的初始化
 int a5 = str_a4[2]; //vector 动态数组的访问,用下标
 int b = str_a4.at(2); // 利用at函数,也就是下下标
 cout << "a=" << a5 << " " << "b=" << b << endl;
 cout << "str_a4的长度为:" << str_a4.size() << endl; //获取长度,
 cout << "str_a4的第一个元素为:" << str_a4.front() << endl; // 获取第一个元素
 cout << "str_a4的第一个元素为:" << str_a4.back() << endl; //获取最后一个元素
 bool p = str_a4.empty(); //判断是否为空
 str_a4.swap(str_a1);
 str_a4.push_back(100); // 只能向尾部插入元素. 一个一个插入
 //str_a.clear(); //对数组元素清空
 str_a4.insert(str_a4.begin(), 888); // 从哪插入, 插入什么元素
 str_a4.insert(str_a4.begin(),3,888); // 从哪插入, 插入几个 插入什么元素
 int szint1[] = { 12,13,45 };
 str_a4.insert(str_a4.end(), szint1, szint1 + sizeof(szint1) / sizeof(int));
 //str_a4.pop_back(); //删除最后一个元素; 一个一个删除
 //str_a4.erase(str_a4.begin(), str_a4.begin()+2); // 从哪开始, 删除几个
 //str_a4.erase(str_a4.begin(), str_a4.end());  
 for (int i = 0; i < str_a4.size(); i++) //遍历
 {
  cout << str_a4[i] << " ";
 }
 vector<int>::iterator itor; //迭代器遍历 
 for (itor = str_a4.begin(); itor != str_a4.end(); itor++)
 {
  cout << *itor << " ";
 }
 return 0;
}

效果展示:

在这里插入图片描述
在这里插入图片描述

(四)、实战项目

在这里插入图片描述

代码展示:

1.第一个经典列题:(课堂刷题的删除与插入)

主要思路:我们要知道各个性质的关系,然后进行调用.

#include <vector>
#include <iostream>
using namespace std;
int main()
{
 vector<int> str_a(13);
 for (int i = 0; i < 13; i++)
 {
  cout << "请输入第" << i + 1 << "个数为:" << endl;
  cin >> str_a[i];
 }
 for (int j = 0; j < 13; j++)
 {
  if (str_a[j] == 3)
  {
   str_a.erase(str_a.begin() + j, str_a.begin() + j);
  }
  else
  {
   cout << str_a[j] << " ";
  }
 }
 return 0;
}

效果展示:

在这里插入图片描述

2.第二个经典列题:(进行两个整形数组合并的问题)

主要思路:首先我们要分析问题得出,题目是要得到两个数组得合并,然后得知vector动态数组恰好有一个特点就是可以根据我们的需求进行变化,我们抓住这一点开始深入调查。创建两个动态数组,然后对数组1进行赋值,再把数组1的值复制给数组二,再创建临时元素,运用push_back()向尾部插入元素的性子,进行插入合并,最后通过for动态遍历.

代码展示:

#include <iostream>
#include <vector>    //  vectoe动态数组的头文件
using namespace std;
int main()
{
	int n,m;
	cout << "请您输入第一个元素数组的个数:" << endl;
	cin >> n;
	vector<int> str_int1(n);
	for (int i = 0; i < str_int1.size(); i++)   //对动态数组一进行动态输入
	{
		cout << "请输入动态数组1第" << i + 1 << "个元素:" << endl;
		cin >> str_int1[i];
	}
	cout << "请输入第二个数组的元素个数:" << endl;
	cin >> m;
	vector<int> str_int2(str_int1);  //把动态数组1复制给动态数组2
	for (int j = 0; j < m; j++)
	{
		cout << "请输入动态数组2第" << j+ 1 << "个元素:" << endl;
		int temp;             
		cin >> temp;              //动态数组2的元素
		str_int2.push_back(temp);      //把动态数组2的元素插入数组2
	}
	cout << "两个整型数组合并后为:" << endl;
	for (int k = 0; k < m + n; k++)
	{
		cout << str_int2[k] << " ";
	}
	return 0;

}

效果展示:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

27.【C/C++ 最全vector数组的用法 (详解)】 的相关文章

随机推荐

  • 前端必会算法——栈和队列

    上一篇 前端必会算法 标准快速排序 栈和队列 栈 xff08 Stack xff09 可以理解为是一个箱子 xff0c 存放东西的容器 栈结构的特点 xff1a 先入后出 xff0c 栈相当于一个箱子 xff0c 先放进去的东西被压在了下面
  • OpenMV的单颜色识别讲解

    OpenMV的官方教程 xff1a 寻找色块 xff1b single color rgb565 blob tracking示例讲解 xff1b 视频讲解 需要提前看的文章 xff1a 程序烧录 xff1b 颜色阈值设置 目录 thresh
  • STM32CubeMX串口通讯

    串口的简单介绍 RS 232与TTL 根据通讯使用的电平标准不同 xff0c 串口通讯可分为 TTL 标准及 RS 232 标准 而STM32的串口是TTL电平标准的 如果需要使用到RS 232则需要一个电平转换芯片 单工通信 半双工通信和
  • 自制超简易通讯协议(中断接收)

    前言 在做蓝牙语音小车时 xff0c 总遇到各式各样的问题 本文主题是笔者在解决串口不够并且数据量小的问题时突发奇想自定义一个简易的通讯协议 由于是用89c51做的主控 xff0c 外设的资源比较紧张 串口只有一个 xff0c 但两个系统需
  • 【Java杂谈】Iterator(迭代器)的使用

    x1f3b8 Iterator是什么 xff1f 迭代器是Java提供的一种访问集合的方法 xff0c Iterator 是 Java 迭代器最简单的实现 xff0c 常用来访问ArrayList HashMap等类的对象 Iterator
  • orb 纯背景物体识别

    include lt chrono gt include lt iostream gt include lt opencv2 core core hpp gt include lt opencv2 features2d features2d
  • Windows逆向安全(一)之基础知识(九)

    汇编比较三种循环 众所周知 xff0c 在C语言可以使用可以使用三种循环 xff0c 分别是 xff1a while do while和for 本文从汇编的角度出发 xff0c 观察这三种循环的差异 范例代码 先贴出三种循环的代码 xff0
  • c++读取yolov5模型进行目标检测(读取摄像头实时监测)

    文章介绍 本文是篇基于yolov5模型的一个工程 xff0c 主要是利用c 43 43 将yolov5模型进行调用并测试 xff0c 从而实现目标检测任务 任务过程中主要重点有两个 xff0c 第一 版本问题 xff0c 第二配置问题 一
  • ROS初学(二):ROS的三种基本通信机制(来自赵虚左老师)

    一 综述 ROS引入通信机制 xff0c 是为了实现ROS节点 xff08 进程 xff09 之间的通信 利用ROS进程的分布式框架 xff0c 可以使得每个进程独立的工作 xff0c 甚至分布于不同的主机工作 机器人上的各种传感器 xff
  • webpack 5.5.1 compiled with 1 error in 63 ms

    新建项目空白目录 xff0c 并运行 npm init y 命令 xff0c 初始化包管理配置文件 package json 新建 src 源代码目录 新建 src gt index html 首页和 src gt index js 脚本文
  • TypeError: Class constructor ServeCommand cannot be invoked without ‘new‘

    安装webpack插件 webpack dev server配置时将package json里面webpack改为webpack serve后 xff0c 运行npm run 脚本名 时出现 TypeError Class construc
  • Field ‘browser‘ doesn‘t contain a valid alias configuration

    意思是字段 39 browser 39 不包含有效的别名配置 意思就是说你打包的css路径不对 这个是我的代码 这里js里面导入的css路径不对 xff0c css文件夹不是和index js平级 xff0c 应该是上级所以正确的代码应该是
  • Failed to load resource: the server responded with a status of 404 (Not Found)

    问题场景 xff1a 编写路由模块 解决方法 xff1a 1 先检测路径是否有写错 2 将vscode中开的插件vetur关闭 3 上面方法不管用时 xff0c 将浏览器插件关闭 xff0c 例如油猴 有什么错误望大佬指出 xff01 xf
  • Vue3.js【未完成】

    Vue3 js 如何关闭烦人的vscode的提示框 https blog csdn net liuyuemozhu article details 101056556 ES6模块化与异步编程高级用法 ES6模块化 1 回顾 xff1a no
  • npm ERR! code ERESOLVEnpm ERR! ERESOLVE unable to resolve dependency tree

    npm下载报错 xff0c 这个是因为npm版本问题 xff0c 例如我下载element ui运行npm i element ui S 因为版本问题我就无法下载 xff0c 解决办法就是在末尾加上 legacy peer deps 即np
  • 前端面试题

    浏览器 输入一个URL到页面过程中发生了什么 xff08 高频 xff09 首先在浏览器中输入URL 查找缓存 xff1a 浏览器先查看浏览器缓存 系统缓存 路由缓存中是否有该地址页面 xff0c 如果有则显示页面内容 如果没有则进行下一步
  • MATALAB动态爱心代码

    第一步 xff1a 先下载MATLAB软件 xff08 该代码只适用于此软件 xff0c 要下载软件才可运行 xff09 第二步 xff1a 点击主页 新建脚本 xff08 可自己给脚本命名 xff0c 我命名的是aixin xff09 第
  • Linux相关博文中使用的头文件

    收录博文中看到的已经封装好的文件时 xff0c 方便各位查看 Log hpp 日志信息 pragma once include lt iostream gt include lt cstdio gt include lt cstdarg g
  • 构造函数和析构函数执行顺序

    析构函数运行顺序 xff1a 1 主函数结束 xff1b 2 函数调用结束 xff1b 3 用delete删除 xff08 new创建的 xff09 对象时 注释代码运行结果 输入坐标6 xff0c 3 xff0c 6 xff0c 2 xf
  • 27.【C/C++ 最全vector数组的用法 (详解)】

    vector动态数组 xff08 一 xff09 什么是vector xff1f xff08 二 xff09 vector的作用是什么 xff08 三 xff09 经典用法 1 vector函数的定义 代码展示 效果展示 2 vector的