【C++ 语言】vector 容器 ( 容器分类 | vector 声明 | vector 初始化 | vector 容器元素增删查改 )
文章目录
- 序列式容器
- vector 简介
- vector ( 向量 ) 头文件
- vector ( 向量 ) 声明及初始化
- vector ( 向量 ) 添加元素
- vector ( 向量 ) 查询元素
- vector ( 向量 ) 删除元素
- vector ( 向量 ) 容量改变
- vector ( 向量 ) 涉及到的运算符重载
- vector ( 向量 ) 相关源码
序列式容器
1. 常用的数据结构 ( 容器 ) 及分类 : 数组 , 链表 , 树 , 栈 , 队列 ; 容器可以分为序列式 , 与关联式 两种 ;
2. 序列式容器 : 序列式容器的元素排列的顺序与元素本身无关 , 其先后顺序由元素添加到容器中的顺序决定 ;
3. 常用的序列式容器 : C++ 的 STL ( 标准模板库 ) , 包括 vector ( 向量 ) , list ( 列表 ) , queue ( 队列 ) , dequeue ( 双向队列 ) , stack ( 栈 ) , priority_queue ( 优先队列 ) ;
vector 简介
vector 向量是一种支持快速随机访问的 , 连续存储元素的容器 ;
vector , dequeue , list 调用方式基本一致 , 这里只研究 vector 一种 ;
vector ( 向量 ) 头文件
vector 头文件 : 使用 vector 首先要导入头文件 , 之后才能使用 vector 容器 ;
//vector 是 C++ 中定义的模板类
#include <vector>
vector ( 向量 ) 声明及初始化
1. 声明 vector ( 基本用法 ) : 格式 " vector <元素类型名称> 容器名称 ; " ; 声明 vector 容器 , 尖括号中的元素类型名称 , 是容器中存储的元素的类型 ;
//声明向量vector<int> vector_1;
2. 声明 vector ( 指定容量 ) : 调用构造方法 , 并传入 int 类型参数 , 该参数就是 vector 容器的元素个数 ;
//调用向量的构造方法 , 并传入一个 int 类型参数//表示创建一个有 8 个 int 类型元素空间的向量vector<int> vector_2(8);
3. 声明 vector ( ① 指定容量 ② 初始化内容 ) : 调用构造方法 , 传入 2 个参数 ;
- ① 容量 : 第一个参数是 vector 容量 ;
- ② 元素 : 第二个参数是 vector 中初始化的元素内容 ;
//表示创建有 8 个元素的向量 , 8 个元素的值都是 2vector<int> vector_3(8 , 2);
4. 声明 vector ( 使用另外 vector 初始化 ) : 调用构造方法 , 传入vector 对象 ;
//初始化向量时 , 传入另一个向量vector<int> vector_4(vector_3);
vector ( 向量 ) 添加元素
添加元素 : 调用 push_back 方法 , 容器出入策略 , 后进先出 ;
// ( 1 ) 增加元素 : 调用 push_back 方法 , 容器出入策略 , 后进先出vector_1.push_back(8);vector_1.push_back(88);
vector ( 向量 ) 查询元素
下面获取的元素都是基于上面小节添加的元素 ;
1. 通过下标获取元素 : 使用格式 " vector 变量名称 [ 下标索引 ] " , 这里的 [] 在 vector 中进行了运算符重载 ;
// <1> 通过下标获取元素// 这里的 [] 在 vector 中进行了运算符重载cout << "通过下标获取 vector_1 第 0 个元素 : vector_1[0] : " << vector_1[0] << endl;
2. 通过 at() 方法获取对应索引的元素 ;
// <2> 通过 at() 方法获取对应索引的元素cout << "通过 at 方法获取 vector_1 第 0 个元素 : vector_1.at(0) : " << vector_1.at(0) << endl;
3. 获取第一个元素 ;
// <3> 获取第一个元素cout << "通过 front 方法获取 vector_1 第 1 个元素 : vector_1.front() : " << vector_1.front() << endl;
4. 获取最后一个元素 ;
// <4> 获取最后一个元素cout << "通过 back 方法获取 vector_1 最后 1 个元素 : vector_1.back() : " << vector_1.back() << endl;
5. 执行结果 :
通过下标获取 vector_1 第 0 个元素 : vector_1[0] : 8
通过 at 方法获取 vector_1 第 0 个元素 : vector_1.at(0) : 8
通过 front 方法获取 vector_1 第 1 个元素 : vector_1.front() : 8
通过 back 方法获取 vector_1 最后 1 个元素 : vector_1.back() : 88
vector ( 向量 ) 删除元素
1. 删除最后加入的元素 : 调用 pop_back 方法 , 容器出入策略 , 后进先出 ; 注意这里并没有修改 vector 容量大小 , 只是将最后的元素清空了 ;
// <1> 调用 pop_back 方法 , 容器出入策略 , 后进先出vector_1.pop_back();
之前向 vector 中先后放入了 8 和 88 两个数 , 然后将后面的 88 元素设置成了 0 , 目前只剩下一个元素 8 , 但容器的元素个数是 2 个 ;
2. 删除所有元素 , 这里只是清空元素内容为 0
// <2> 删除所有元素 , 这里只是清空元素内容为 0vector_1.clear();
3. 删除指定位置区间的元素 , 这里只是清空元素内容为 0 , 传入 2 个参数 ;
- ① 第 1 个是删除的起始位置 ;
- ② 第 2 个参数是删除的结束位置 ;
// <3> 删除指定位置区间的元素 , 这里只是清空元素内容为 0// 第 1 个是删除的起始位置 , // 第 2 个参数是删除的结束位置 ;//删除从开始到结束的所有元素vector_1.erase(vector_1.begin() , vector_1.end());
4. 关于删除元素的内存说明 : 删除若干元素后 , vector 的容量 , 即内存所占的空间是不会减小的 ;
5. 打印删除元素后的 vector 容器大小 : 调用 vector 的 capacity() 方法即可获取其容量大小 ;
- ① 代码示例 :
//打印 vector 容器容量大小 , 调用 vector 的 capacity() 方法即可获取其容量大小// 这个容量大小是元素个数 , 不是内存字节数cout << "打印 vector_1 容量大小 : vector_1.capacity() : " << vector_1.capacity() << endl;
- ② 执行结果 :
打印 vector_1 容量大小 : vector_1.capacity() : 2
这个容量大小是元素个数 , 不是内存字节数 ;
vector ( 向量 ) 容量改变
1. 容量修改 : 删除元素 , 并不能修改容器的容量 , 如果要修改容量 , 需要使用其他容器与该容器进行交换 ;
2. 容器交换 : 调用 vector 的 swap() 方法 , 进行容器交换 , 传入 vector 容器对象当做参数 ;
- ① 代码示例 :
//创建一个新的 vector , 此时其容量为 0vector<int> vector_swap;//将创建的新的 vector_swap 与 vector_1 容器进行交换vector_swap.swap(vector_1);cout << "打印 vector_1 交换后的容量大小 : vector_1.capacity() : " << vector_1.capacity() << endl;
- ② 执行结果 :
打印 vector_1 交换后的容量大小 : vector_1.capacity() : 0
vector ( 向量 ) 涉及到的运算符重载
vector 运算符重载 : 使用 " [] " 可以访问 vector 中指定索引的变量 , vector 对 " [] " 符号进行了重载 , Ctrl + 左键 点击中括号符号 , 就可以跳转到 vector 定义的位置 , 下面的内容是 vector 对 " [] " 进行运算符重载的内容 ;
_NODISCARD _Ty& operator[](const size_type _Pos) {auto& _My_data = _Mypair._Myval2;
#if _CONTAINER_DEBUG_LEVEL > 0_STL_VERIFY(_Pos < static_cast<size_type>(_My_data._Mylast - _My_data._Myfirst), "vector subscript out of range");
#endif // _CONTAINER_DEBUG_LEVEL > 0return _My_data._Myfirst[_Pos];}
vector ( 向量 ) 相关源码
1. 代码示例 :
// 004_Container.cpp: 定义应用程序的入口点。
//#include "004_Container.h"//vector 是 C++ 中定义的模板类
#include <vector>using namespace std;int main()
{cout << "Hello Container。" << endl;// I . vector 向量 ( vector , dequeue , list 调用方式基本一致 )//vector 向量是一种支持快速随机访问的 , 连续存储元素的容器//声明向量vector<int> vector_1;//调用向量的构造方法 , 并传入一个 int 类型参数//表示创建一个有 8 个 int 类型元素空间的向量vector<int> vector_2(8);//表示创建有 8 个元素的向量 , 8 个元素的值都是 2vector<int> vector_3(8 , 2);//初始化向量时 , 传入另一个向量vector<int> vector_4(vector_3);// 2. 使用向量 : 增删查改// ( 1 ) 增加元素 : 调用 push_back 方法 , 容器出入策略 , 后进先出vector_1.push_back(8);vector_1.push_back(88);// ( 2 ) 查询元素 : // <1> 通过下标获取元素// 这里的 [] 在 vector 中进行了运算符重载cout << "通过下标获取 vector_1 第 0 个元素 : vector_1[0] : " << vector_1[0] << endl;// <2> 通过 at() 方法获取对应索引的元素cout << "通过 at 方法获取 vector_1 第 0 个元素 : vector_1.at(0) : " << vector_1.at(0) << endl;// <3> 获取第一个元素cout << "通过 front 方法获取 vector_1 第 1 个元素 : vector_1.front() : " << vector_1.front() << endl;// <4> 获取最后一个元素cout << "通过 back 方法获取 vector_1 最后 1 个元素 : vector_1.back() : " << vector_1.back() << endl;// ( 4 ) 删除元素 : // <1> 调用 pop_back 方法 , 容器出入策略 , 后进先出vector_1.pop_back();//之前向 vector 中先后放入了 8 和 88 两个数 , // 然后删除了后一个元素 88 , 目前只剩下一个元素 8// <2> 删除所有元素 , 这里只是清空元素内容为 0vector_1.clear();// <3> 删除指定位置区间的元素 , 这里只是清空元素内容为 0// 第 1 个是删除的起始位置 , // 第 2 个参数是删除的结束位置 ;//删除从开始到结束的所有元素vector_1.erase(vector_1.begin() , vector_1.end());//关于删除元素内存说明 : // 删除若干元素后 , vector 的容量 , 即内存所占的空间是不会减小的 ; // 调用删除方法后 , 就不能在查询上述元素了//打印 vector 容器容量大小 , 调用 vector 的 capacity() 方法即可获取其容量大小// 这个容量大小是元素个数 , 不是内存字节数cout << "打印 vector_1 容量大小 : vector_1.capacity() : " << vector_1.capacity() << endl;// ( 5 ) 改变容量 , 容器交换 , 这里使用一个容量为 0 的容器与之交换即可//创建一个新的 vector , 此时其容量为 0vector<int> vector_swap;//将创建的新的 vector_swap 与 vector_1 容器进行交换vector_swap.swap(vector_1);cout << "打印 vector_1 交换后的容量大小 : vector_1.capacity() : " << vector_1.capacity() << endl;return 0;
}
2.执行结果 :
Hello Container。
通过下标获取 vector_1 第 0 个元素 : vector_1[0] : 8
通过 at 方法获取 vector_1 第 0 个元素 : vector_1.at(0) : 8
通过 front 方法获取 vector_1 第 1 个元素 : vector_1.front() : 8
通过 back 方法获取 vector_1 最后 1 个元素 : vector_1.back() : 88
打印 vector_1 容量大小 : vector_1.capacity() : 2
打印 vector_1 交换后的容量大小 : vector_1.capacity() : 0
【C++ 语言】vector 容器 ( 容器分类 | vector 声明 | vector 初始化 | vector 容器元素增删查改 )相关推荐
- sql语言的应用(对数据库,数据表,数据项的增删查改和约束)
目录 一.SQL数据库 1.SQL介绍 2.DDL-操作数据库 3.DDL-操作数据表 4.DML-INSERT语句 5.DML-UPDATE语句 6.DML-DELETE语句 7.DQL-单表查询 ...
- 【数据结构】顺序表的增删查改 (C语言实现)
文章目录 一.线性表 二.顺序表 1.什么是顺序表 2.顺序表的分类 三.动态顺序表的实现 1.结构的定义 2.顺序表的初始化 3.检查容量 4.在头部插入数据 5.在尾部插入数据 6.在指定位置插入 ...
- C语言实现顺序表(增删查改等数据管理)
顺序表seqlist 小伙伴们,提到顺序表会想到什么呢? 数组?还是链表? 其实,数组和链表都是属于线性表,而链表在逻辑上是线性的,并非物理存储上也为线性:而数组无论在逻辑上还是物理存储上均为线性 所 ...
- 【数据结构】带头双向循环链表的增删查改(C语言实现)
文章目录 前言 一.什么是带头双向循环链表 二.带头双向循环链表的实现 1.结构的定义 2.链表的初始化 3.开辟新节点 4.在头部插入数据 5.在尾部插入数据 6.查找数据 7.在pos位置之前插入 ...
- 【数据结构】单链表的增删查改(C语言实现)
文章目录 前言 一.链表 1.链表的概念及结构 2.链表的分类 3.最常用的两种链表 二.单链表的实现 1.结构的定义 2.创建新节点 3.在头部插入数据 4.在尾部插入数据 5.查找数据 6.在po ...
- c语言 单链表的增删查改
文章目录 1.链表基本结构 2.链表的尾插 3.链表的尾删 4.链表的头插与头删 头插 头删 5.链表的查找与修改 查找 修改 6.链表的节点插入与删除 插入 删除 1.链表基本结构 链表由一个个的节 ...
- SQL标准结构化语言练习,SQL增删查改,SQL实现对bank数据的操作
一.建立一个名称为bank的数据库 二.建立表 建立branch表,设置branch_name为主键 继续此操作建立customer,account,depositor,loan,borrower表 ...
- C语言 数据结构 链表的增删查改
分别用函数实现了链表的: 1.增加(头插法,尾插法,有序插入) 2.删除 3.修改 4.查找 C代码 #define _CRT_SECURE_NO_WARNINGS #include<stdio ...
- c语言 增删查 案例,C语言实现单链表的增删查改
#include #include #include"linklist.h" #define Test_Header printf("\n-----%s-----\n&q ...
最新文章
- 浅析 Linux 初始化 init 系统: UpStart
- 《HotSpot实战》读后感
- SAP Commerce Cloud 架构概述
- WSDM 2022 | 基于元学习的多场景多任务商家建模
- 数据分析方法有哪些_数据分析方法
- typeof 和instanceof
- 11月百度凤巢升级后的变化
- 人眼定位python代码_使用dlib,OpenCV和Python进行人脸识别—人眼眨眼检测
- Azure 基础:Blob Storage
- i7 1165g7和i7 10510u哪个好
- 建设 Web3,现在最需要 Web2 的移民?
- ios 自架验证服务器,iOS 13-Sign In with Apple(苹果登录)APP+后端验证
- WinForm中使用Win10 蓝牙Ble Sdk
- 网页端实现大尺寸图片的查看、放大缩小、标记标尺等功能
- Smart200-ST20PLC输入输出接线图
- Linux学习篇——基于C语言使用结构体、链表实现贪吃蛇
- 信息系统项目管理师必背核心考点(二十七)关键路径法(CPM)
- PCB各层的含义 (solder paste 区别)
- 最强OLAP分析引擎-Clickhouse快速精通-上
- 一张图进阶 RocketMQ - 通信机制