如何熟练使用vector?

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨
🐻推荐专栏1: 🍔🍟🌯C语言初阶
🐻推荐专栏2: 🍔🍟🌯C语言进阶
🔑个人信条: 🌵知行合一
🍉本篇简介:>:介绍vector的使用
vector官网链接:传送门
目录
- 一、构造函数
- (1)无参构造
- (2)初始化为n个值
- (3) 迭代器区间初始化
- (4)拷贝构造
- 二、容量操作
- (1) 一览表
- (2) 代码演示
- 三、修改与访问
- (1) push_back && pop_back
- assign()
- (2) insert()
- (3) erase()函数
- (4) swap()
- (5) `[]`运算符重载
一、构造函数

| 构造函数 | 含义 |
|---|---|
| vector (const allocator_type& alloc = allocator_type()); | 无参构造 |
| vector(size_type n, const value_type& val = value_type()) | 初始化为n个val |
| vector (InputIterator first, InputIterator last,const allocator_type& alloc = allocator_type()) | 迭代器区间初始化 |
| vector (const vector& x); | 拷贝构造 |
(1)无参构造
默认什么元素也没有.
有效元素个数:size=0
容量:capacity=0;
//无参构造vector<int> v1;//auto it1 = v1.begin();//可以使用auto自动推导类型vector<int>::iterator it1 = v1.begin();while (it1 != v1.end()){cout << *it1 << " ";it1 ++ ;}cout << "v1.size=" << v1.size() << endl;cout << "v1.capacity=" << v1.capacity() << endl;cout << endl;
运行结果:
v1.size=0
v1.capacity=0
(2)初始化为n个值
用n个val去初始化vector;
//初始化为n个值vector<int> v2(4,0);//auto it2 = v2.begin();vector<int>::iterator it2 = v2.begin();while (it2 != v2.end()){cout << *it2 << " ";it2++;}cout << endl;
运行结果:
0 0 0 0
(3) 迭代器区间初始化
用一个迭代器区间进行初始化,这里采用数组的头和尾作为迭代器区间.
//迭代器区间初始化int a3[10] = { 1,3,4,5,6,7,8,98,100,11 };vector<int> v3(a3, a3 + 10);//注意这里给的是+10,因为迭代器的end是指向最后一个有效元素的下一个位置,左闭右开auto it3 = v3.begin();while (it3 != v3.end()){cout << *it3 << " ";it3++;}cout << endl;
运行结果:
1 3 4 5 6 7 8 98 100 11
(4)拷贝构造
//拷贝构造vector<int> v4(v3);//v3就是上面的迭代器区间初始化好的v3auto it4 = v4.begin();while (it4 != v4.end()){cout << *it4 << " ";it4++;}cout << endl;
运行结果:
1 3 4 5 6 7 8 98 100 11
二、容量操作

(1) 一览表
| 接口 | 说明 |
|---|---|
| size() | 有效数据的个数 |
| resize() | 改变有效数据的个数 |
| capacity() | 容量大小 |
| empty() | 判空 |
| reserve() | 改变容量大小 |
(2) 代码演示
void test2()
{int a1[10] = { 1,3,4,5,6,7,8,98,100,11 };vector<int> v1(a1, a1 + 10);cout << "v1.size()=" << v1.size() << endl;//显示有效数据的个数cout << "v1.capacity()=" << v1.capacity() << endl;//显示容量的大小cout << "v1.empty()=" << v1.empty() << endl;//判断容器是否为NULLcout << endl;v1.resize(5);//改变有效数据的个数cout << "v1.size()=" << v1.size() << endl;cout << "v1.capacity()=" << v1.capacity() << endl;vector<int>::iterator it1 = v1.begin();while (it1 != v1.end()){cout << *it1 << " ";it1++;}cout << endl;v1.resize(15,66);cout << "v1.size()=" << v1.size() << endl;cout << "v1.capacity()=" << v1.capacity() << endl;cout << endl;it1 = v1.begin();while (it1 != v1.end()){cout << *it1 << " ";it1++;}cout << endl;v1.reserve(10);//改变容量的大小.cout << "v1.capacity()=" << v1.capacity() << endl;v1.reserve(50);cout << "v1.capacity()=" << v1.capacity() << endl;}
运行结果:

三、修改与访问

| 接口 | 说明 |
|---|---|
| assign() | 将新内容覆盖给容器,替换其当前内容,并相应地修改其大小。 |
| push_back() | 尾插 |
| pop_back() | 尾删 |
| insert() | 指定位置pos之前插入 |
| erase() | 删除指定位置pos的值 |
| swap() | 交换两个容器 |
operator[ ]() | 下标访问运算符重载 |
(1) push_back && pop_back
尾插和尾删相信大家已经比较熟悉了.
assign()
assign函数需要注意.
void assign (size_type n, const value_type& val);
如果n<size,则是将n个val将原有数据覆盖,令size=n,而不修改容量.
如果n>size,则先扩容,再将n个val值存入.
//push_back &&pop_backint a1[5] = { 1,2,3,4,5 };vector<int> v1(a1, a1 + 5);for (auto itt : v1){ //1 2 3 4 5cout << itt << " ";}cout << endl;//尾插v1.push_back(6);v1.push_back(7);for (auto itt : v1){ //1 2 3 4 5 6 7cout << itt << " ";}cout << endl;//尾删v1.pop_back();for (auto itt : v1){ //1 2 3 4 5 6cout << itt<<" ";}cout << endl;//将新内容覆盖给容器,替换其当前内容,并相应地修改其大小v1.assign(5, 2);for (auto itt : v1){ //2 2 2 2 2cout << itt << " ";}cout << endl << v1.size() << " " << v1.capacity() << endl;//5 7cout << endl;
运行结果:
1 2 3 4 5
1 2 3 4 5 6 7
1 2 3 4 5 6
2 2 2 2 2
5 7
(2) insert()
指定位置pos之前插入.

代码演示:
int a1[5] = { 1,2,3,4,5 };vector<int> v1(a1, a1 + 5);for (auto itt : v1){cout << itt << " ";}cout << endl;//iterator insert(iterator position, const value_type & val);v1.insert(v1.begin() + 2, 66);//在第三个位置的前面插入数据.for (auto itt : v1){cout << itt<<" ";}cout << endl;//void insert(iterator position, size_type n, const value_type & val);v1.insert(v1.begin() + 5, 5, -1);//在第六个位置的前面插入5个-1.for (auto itt : v1){cout << itt << " ";}cout << endl;int a2[5] = { 1,2,3,4,5 };int a3[5] = { 6,7,8,9,10 };vector<int> v2(a2, a2 + 5);for (auto itt : v2){cout << itt << " ";}cout << endl;//void insert (iterator position, InputIterator first, InputIterator last);v2.insert(v2.begin()+5,a3 ,a3 + 5);for (auto itt : v2){cout << itt << " ";}cout << endl;
运行结果:

(3) erase()函数

删除指定位置pos的值
//eraseint a4[10] = { 1,2,3,4,5,6,7,8,9,10 };vector<int> v4(a4, a4 + 10);for (auto itt : v4){cout << itt << " ";}cout << endl;//iterator erase (iterator position);v4.erase(v4.begin() + 1);for (auto itt : v4){cout << itt << " ";}cout << endl;//iterator erase (iterator first, iterator last);v4.erase(v4.begin()+4, v4.begin() + 9);for (auto itt : v4){cout << itt << " ";}cout << endl;
运行结果:

(4) swap()
用于交换两个容器,注意观察交换后容量的变化.
//swap//void swap(vector & x);int a5[10] = { 1,2,3,4,5,6,7,8,9,10 };vector<int> v5(a5, a5 + 10);int a6[10] = { 2,4,6,8,10 };vector<int> v6(a6, a6+5);cout << "v5=";for (auto itt : v5){cout << itt << " ";}cout << endl;cout << "v6=";for (auto itt : v6){cout << itt << " ";}cout << endl;swap(v5, v6);cout << endl;cout << "v5=";for (auto itt : v5){cout << itt << " ";}cout << endl;cout << "v6=";for (auto itt : v6){cout << itt << " ";}cout << endl;cout << "v5.capacity()" << v5.capacity();cout << endl;cout << "v6.capacity()" << v6.capacity();cout << endl;
运行结果:

(5) []运算符重载
可以像数组一样通过下标直接访问.
//[]int a7[10] = { 1,2,3,4,5,6,7,8,9,10 };vector<int> v7(a5, a5 + 10);cout << "v7=";for (int i = 0; i < 10; i++){cout << v7[i] << " ";}
v7=1 2 3 4 5 6 7 8 9 10
vector的使用就分享到这里了.下一期vector模拟实现见.

相关文章:
如何熟练使用vector?
🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 …...
gitlab-rake gitlab:backup:create 执行报错 Errno::ENOSPC: No space left on device
gitlab仓库备份执行 gitlab-rake gitlab:backup:create报错如下: 问题分析:存储备份的空间满 解决方法: 方法1:清理存放路径,删除不需要文件,释放空间。 方法2:创建一个根目录的挂载点&#x…...
【Nginx】负载均衡当其中一台服务器宕机之后
搭建一个简单的负载均衡,然后关闭其中一台再来访问,会发现我们的浏览器卡住一直转圈圈,过了很久才会显示结果。由此我们可以得出结论Nginx负载的时候如果其中一台服务挂掉了,它会把请求转发到另一个可以提供服务的机器,…...
每日一题 2511. 最多可以摧毁的敌人城堡数目
难度:简单 翻译:寻找距离最远的 1 和 -1 的组合,要求它们之间只有0 class Solution:def captureForts(self, forts: List[int]) -> int:res, t 0, -1for i, fort in enumerate(forts):if fort -1 or fort 1:if t > 0 and fort ! f…...
NLP(六十七)BERT模型训练后动态量化(PTDQ)
本文将会介绍BERT模型训练后动态量化(Post Training Dynamic Quantization,PTDQ)。 量化 在深度学习中,量化(Quantization)指的是使用更少的bit来存储原本以浮点数存储的tensor,以及使用更少的…...
机器学习和数据挖掘04-PowerTransformer与 MinMaxScaler
概念 PowerTransformer(幂变换器) PowerTransformer 是用于对数据进行幂变换(也称为Box-Cox变换)的预处理工具。幂变换可以使数据更接近正态分布,这有助于某些机器学习算法的性能提升。它支持两种常用的幂变换&#x…...
1.15 自实现GetProcAddress
在正常情况下,要想使用GetProcAddress函数,需要首先调用LoadLibraryA函数获取到kernel32.dll动态链接库的内存地址,接着在调用GetProcAddress函数时传入模块基址以及模块中函数名即可动态获取到特定函数的内存地址,但在有时这个函…...
总结ADX指标交易的好处
股神巴菲特从一个穷小子变成世界富豪,而闻名世界。anzo capital昂首资本以为这辈子再也不会和巴菲特产生任何交集,直到我看了巴菲特的发家史,才发现原来我们都使用过ADX指标盈利过,下面anzo capital昂首资本就总结一下使用ADX指…...
ConsoleApplication815项目(直接加载+VEH Hook Load)
上线图 ConsoleApplication815.cpp #include <iostream> #include<Windows.h> #include "detours.h" #include "detver.h" #pragma comment(lib,"detours.lib")#pragma warning(disable:4996)LPVOID Beacon_address; SIZE_T Beacon…...
事务(SQL)
事务概述 事务是一组操作的集合,他是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向西永提交或撤销操作请求。这组操作,要么全部执行成功,要么全部执行失败。 事务操作 查看/设置事务提交方式 -- 查看/设置事务…...
原型,原型链,继承(圣杯模式)
经典模式和圣杯模式区别 经典模式和圣杯模式都是用于解决构造函数继承和原型继承的问题,但它们在实现继承的方式上有所不同。 经典模式是通过将子类的原型对象设置为父类的实例来实现继承,然后将子类的构造函数设置为子类本身。这样子类既可以继承父类…...
远程方法调用中间件Dubbo在spring项目中的使用
Dubbo是一个分布式服务框架,它可以帮助我们快速开发和提供高性能、高可靠性的分布式服务,同时提供服务治理、容错、负载均衡等功能。 使用Dubbo可以分为以下步骤: 引入Dubbo依赖:在项目的pom.xml文件中引入Dubbo的依赖。编写服务…...
MFC -- Date Time Picker 控件使用
当前环境:VS2015 Windows 10 //(一)使用普通函数, 获取当前时间CString strCurrentTime; COleDateTime m_time COleDateTime::GetCurrentTime(); strCurrentTime m_time.Format(_T("%Y-%m-%d %H:%M:%S")); SetDlgIt…...
zookeeper 集群
zookeeper 集群 1、zookeeper 集群说明 initLimit 是Zookeeper用它来限定集群中的Zookeeper服务器连接到Leader的时限 syncLimit 限制了follower服务器与leader服务器之间请求和应答之间的时限 服务器名称与地址:集群信息(服务器编号,服务器…...
stable diffusion实践操作-随机种子seed
系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、seed是什么?二、使用步骤1.多批次随机生成多张图片2.提取图片seed3. 根据seed 再次培养4 seed使用4.1 复原别人图4.1 轻微修改4.2 固定某个人物-修改背景 三、差异随机种子1. webUI位置2. 什么…...
大数据可视化大屏实战项目(4)物流数据云看台(包括动态登陆页面)—HTML+CSS+JS【源码在文末】(可用于比赛项目或者作业参考中)
大数据可视化大屏实战项目(4)物流数据云看台(包括动态登陆页面)—HTMLCSSJS【源码在文末】(可用于比赛项目或者作业参考中🐕🐕🐕) 一,项目概览 ☞☞☞☞☞☞…...
在ubuntu下远程链接仓库gitte/github
后期适当加点图片,提高可读性。 本教程是最基础的连接教程,设计git的操作也仅仅局限于push/pull,如果想全面了解,可以参考廖雪峰git教程 在Ubuntu上初始化本地Git仓库并链接到远程Gitee仓库(github同理),需要按照以下步…...
一些自己整理的工具实用参数
工具实用参数 sqlmap -u: 指定需要测试的目标URL(格式:http://www.example.com/test.php?id1) --cookie: 设置需要发送的 HTTP Cookie,例如:--cookie"sid123456;PHPSESSID654321" --threads:…...
C# Timer定时器
C# Timer定时器 Timer定时器定时器主要用到的就是Timer的Tick事件,另外还要设置时间间隔: 下面这个实力演示了每隔一秒,picturebox中的图片来回切换,每隔一秒,文本框中显示当前时间。 using System; using System.Co…...
oracle怎么删除表索引
Oracle是目前常用的企业级关系型数据库管理系统,用于存储和管理大量数据。在Oracle中,表索引是用于提高查询效率的重要组成部分,但也有时候需要删除表索引。本文将介绍如何在Oracle中删除表索引。 一、查看表索引 在删除表索引之前ÿ…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...
JS红宝书笔记 - 3.3 变量
要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...
