当前位置: 首页 > article >正文

【C++ 08】vector 顺序表的常见基本操作

文章目录

  • 前言
  • 🌈 Ⅰ vector 类对象的定义
    • 1. 定义格式
    • 2. vector 对象的构造
  • 🌈 Ⅱ vector 类对象的容量
  • 🌈 Ⅲ vector 类对象的访问
  • 🌈 Ⅳ vector 类对象的修改
  • 🌈 Ⅴ vector 定义二维数组

前言

vector 介绍

  1. vector 是一个可变大小数组的序列容器。
  2. 和顺序表一样,vector 也采用连续的空间存储不同类型的元素。
  3. vector 使用类模板定义,顺序表内的元素类型根据 vector 指定的元素决定。

vector 引入

  • 使用 vector 之前要先添加头文件 #include <vector> ,并且还要展开 std 空间域内的 vector 类 using std::vector;

🌈 Ⅰ vector 类对象的定义

1. 定义格式

  • 类模板生成的 vector 顺序表中的元素类型为指定的元素类型。
    • 如: typename 为 int 则 vector 顺序表内的元素类型也为 int,其余同理。 本篇文章主要以 int 类型举例。
vector<typename> name;

2. vector 对象的构造

构造函数功能说明
vector()无参构造
vector(size_type n, const value_type& val = value_type())构造并初始化 n 个值为 val 的元素,val 的缺省值为 0
vector (const vector& x)使用已有的 vector 对象拷贝构造新的 vector 对象
vector (InputIterator first, InputIterator last)使用迭代器进行构造

在这里插入图片描述

🌈 Ⅱ vector 类对象的容量

函数说明

函数名称功能说明
size()获取顺序表的有效元素个数
empty()判断当前顺序表是否为空
capacity()返回当前顺序表能够容纳的最多有效数据个数
reserve(n)为指定顺序表预留 n 个元素的空间,实际开辟的空间只会 >= n
resize(n, val)将当前顺序表的有效元素改为 n 个,如果 n 大于当前有效数据个数,则用 val 填充
void test2()
{
	vector<int> v{ 1,2,3,4,5,6,7,8,9,10 };

	cout << "size: " << v.size() << endl;			// 获取当前顺序表的有效元素个数
	cout << "empty: " << v.empty() << endl;			// 判断当前顺序表是否为空
	cout << "capacity: " << v.capacity() << endl;	// 判断当前可容纳的最多有效元素个数

	v.reserve(100);		
	cout << "reserve: " << v.capacity() << endl;	// 预留 >= 100 个元素的空间

	v.resize(15,3);		
	cout << "resize: " << v.size() << endl;			// 将有效元素个数改成 15 个,超出部分用 3 填充

	for (auto val : v)
		cout << val << " ";
	cout << endl;
}

在这里插入图片描述

🌈 Ⅲ vector 类对象的访问

1. operator[] 访问

  • 对方括号 [ ] 进行了重载,使得 vector 对象能够像普通数组那样通过 下标 + [ ] 进行访问。

在这里插入图片描述

2. 迭代器 iterator 访问

  • 当前要使用的 iterator 属于 vector 类域,需要 vector<int::iterator 指定使用的是 vector 类域内的迭代器。
iterator 的使用接口说明
begin() + end()begin() 获取数组第一个元素的地址,end() 获取最后一个有效元素的下一个位置
rbegin() + rend()rbegin() 获取最后一个有效数据的位置,rend() 获取第一个数据的前一个位置

在这里插入图片描述

3. 获取首尾元素

函数名称功能说明
front()获取顺序表的第一个有效元素
back()获取顺序表的最后一个有效元素

在这里插入图片描述

🌈 Ⅳ vector 类对象的修改

函数名称功能说明
push_back(val)将 val 尾插进顺序表
pop_back()对顺序表执行尾删
insert(iterator position, const value_type& val)向迭代器指向的 pos 位置处插入一个值 val,原 pos 及之后的元素往后挪
insert(iterator position, InputIterator first, InputIterator last)在指定位置处插入一段迭代器区间内的值
swap(vector& x)交换两个 vector 对象内的数据
clear()清除顺序表内的有效数据
void test4()
{
	vector<int> v1{ 1,2,3,4,5 };
	vector<int> v2{ 5,4,3,2,1 };

	v1.push_back(1);				// 将 1 尾插进顺序表
	v1.pop_back();					// 对顺序表执行伪删
	v1.insert(v1.begin() + 3, 30);	// 在下标 3 处插入 30
	v1.swap(v2);					// 交换 v1 和 v2 内的数据
	
	// 将 v2 的 0 ~ 2 处的值插入 v1 的 0 号位置
	v1.insert(v1.begin(), v2.begin(), v2.begin() + 2);	
}

🌈 Ⅴ vector 定义二维数组

vector<vector<int>> array;
  • vector 是一个会根据指定类型生成具体类的类模板,<> 号里的可以是任意数据类型,vector<vector> array 表示 array 的每个元素都是一个 vector 一维数组类型的数据。
  • 一堆的一维数组组在一起就构成了二维数组。

在这里插入图片描述


http://www.kler.cn/a/272289.html

相关文章:

  • 【CPU】RISC-V中的PMP物理内存保护单元
  • 第12章:Python TDD完善货币加法运算(一)
  • 7. 计算机视觉
  • uniapp——App 监听下载文件状态,打开文件(三)
  • Docker配置国内镜像源
  • 【LeetCode100】--- 寻找重复数
  • Python——pgzero游戏打包exe执行时报错
  • 【Docker】常用命令 docker ps
  • pyinstaller打包不显示DOS窗口
  • 【GPT-SOVITS-03】SOVITS 模块-生成模型解析
  • LabVIEW电磁阀特性测控系统
  • UnityShader:IBL
  • 【洛谷 P9242】[蓝桥杯 2023 省 B] 接龙数列 题解(线性DP+二维数组)
  • -bash-4.2$
  • Lua中文语言编程源码-第六节,更改lmathlib.c 数学库函数, 使Lua加载中文库关键词(与数学库相关)
  • docker-compose是什么
  • 【PyTorch】进阶学习:一文详细介绍 torch.load() 的应用场景、实战代码示例
  • 指南:在各主流操作系统上安装与配置Apache Tomcat
  • git问题列表(一)(持续更新中~~~)
  • day11-栈与队列02
  • C语言快速入门之内存函数的使用和模拟实现
  • 大数据 - Spark系列《十四》- spark集群部署模式
  • 物联网终端telegraf采集设备信息
  • 实战!wsl 与主机网络通信,在 wsl 中搭建服务器。学了计算机网络,但只能刷刷面试题?那也太无聊了!这篇文章可以让你检测你的计网知识!
  • 7.Java整合MongoDB—项目创建
  • 学习python笔记:8,随机数