文章目录

  • 序列式容器
  • 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 容器元素增删查改 )相关推荐

  1. sql语言的应用(对数据库,数据表,数据项的增删查改和约束)

    目录 一.SQL数据库 1.SQL介绍 2.DDL-操作数据库 3.DDL-操作数据表 4.DML-INSERT语句 5.DML-UPDATE语句 6.DML-DELETE语句 7.DQL-单表查询 ...

  2. 【数据结构】顺序表的增删查改 (C语言实现)

    文章目录 一.线性表 二.顺序表 1.什么是顺序表 2.顺序表的分类 三.动态顺序表的实现 1.结构的定义 2.顺序表的初始化 3.检查容量 4.在头部插入数据 5.在尾部插入数据 6.在指定位置插入 ...

  3. C语言实现顺序表(增删查改等数据管理)

    顺序表seqlist 小伙伴们,提到顺序表会想到什么呢? 数组?还是链表? 其实,数组和链表都是属于线性表,而链表在逻辑上是线性的,并非物理存储上也为线性:而数组无论在逻辑上还是物理存储上均为线性 所 ...

  4. 【数据结构】带头双向循环链表的增删查改(C语言实现)

    文章目录 前言 一.什么是带头双向循环链表 二.带头双向循环链表的实现 1.结构的定义 2.链表的初始化 3.开辟新节点 4.在头部插入数据 5.在尾部插入数据 6.查找数据 7.在pos位置之前插入 ...

  5. 【数据结构】单链表的增删查改(C语言实现)

    文章目录 前言 一.链表 1.链表的概念及结构 2.链表的分类 3.最常用的两种链表 二.单链表的实现 1.结构的定义 2.创建新节点 3.在头部插入数据 4.在尾部插入数据 5.查找数据 6.在po ...

  6. c语言 单链表的增删查改

    文章目录 1.链表基本结构 2.链表的尾插 3.链表的尾删 4.链表的头插与头删 头插 头删 5.链表的查找与修改 查找 修改 6.链表的节点插入与删除 插入 删除 1.链表基本结构 链表由一个个的节 ...

  7. SQL标准结构化语言练习,SQL增删查改,SQL实现对bank数据的操作

    一.建立一个名称为bank的数据库 二.建立表 建立branch表,设置branch_name为主键 继续此操作建立customer,account,depositor,loan,borrower表 ...

  8. C语言 数据结构 链表的增删查改

    分别用函数实现了链表的: 1.增加(头插法,尾插法,有序插入) 2.删除 3.修改 4.查找 C代码 #define _CRT_SECURE_NO_WARNINGS #include<stdio ...

  9. c语言 增删查 案例,C语言实现单链表的增删查改

    #include #include #include"linklist.h" #define Test_Header printf("\n-----%s-----\n&q ...

最新文章

  1. 浅析 Linux 初始化 init 系统: UpStart
  2. 《HotSpot实战》读后感
  3. SAP Commerce Cloud 架构概述
  4. WSDM 2022 | 基于元学习的多场景多任务商家建模
  5. 数据分析方法有哪些_数据分析方法
  6. typeof 和instanceof
  7. 11月百度凤巢升级后的变化
  8. 人眼定位python代码_使用dlib,OpenCV和Python进行人脸识别—人眼眨眼检测
  9. Azure 基础:Blob Storage
  10. i7 1165g7和i7 10510u哪个好
  11. 建设 Web3,现在最需要 Web2 的移民?
  12. ios 自架验证服务器,iOS 13-Sign In with Apple(苹果登录)APP+后端验证
  13. WinForm中使用Win10 蓝牙Ble Sdk
  14. 网页端实现大尺寸图片的查看、放大缩小、标记标尺等功能
  15. Smart200-ST20PLC输入输出接线图
  16. Linux学习篇——基于C语言使用结构体、链表实现贪吃蛇
  17. 信息系统项目管理师必背核心考点(二十七)关键路径法(CPM)
  18. PCB各层的含义 (solder paste 区别)
  19. 最强OLAP分析引擎-Clickhouse快速精通-上
  20. 一张图进阶 RocketMQ - 通信机制

热门文章

  1. python 03 字符串详解
  2. 大话网站---从Hello World到高并发网站
  3. Visual SVN 非常好的转贴
  4. Promise 的使用
  5. [HDU] 5444.Elven Postman (堆)
  6. JRebel的优势与使用(基于IDEA)
  7. 一些汇编中的 trick
  8. shell之实战应用一(查找xml文档中的关键字段)
  9. Spring_day01
  10. 查找 之 散列表查找(哈希表)