c++的学习之路:12、vector(1)
这章主要是根据cplusplus中的文档进行使用Vector,文章末附上测试代码。
目录
一、什么是vector
二、vector的简单使用
三、代码
一、什么是vector
下图是cplusplus的简介,上面一共有六点,如下:
1、vector是表示可变大小数组的序列容器
2、就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。
3、本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小。
4、vector分配空间策略:vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。
5、 因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。
6、与其它动态序列容器相比(deque, list and forward_list), vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起list和forward_list统一的迭代器和引用更好。
上面六点就是下面的文档的介绍,总的来说,根据这个文档就可以正常使用vector,通过查看文档,发现他也是有六大块,然后发现和string差不多,也就是说这个也是一个类模式都差不多。


二、vector的简单使用
下面先是创建了一个对象v,然后在用push_back进行尾插,在进行打印,这里也是利用了【】、迭代器和语法for进行访问打印,结果如下图,代码如下。

void Test1()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
v.push_back(6);
for (size_t i = 0; i < v.size(); i++)
{
cout << v[i] << ' ';
}
cout << endl;
vector<int>::iterator it = v.begin();
while (it != v.end())
{
cout << *it << ' ';
++it;
}
cout << endl;
for (auto vi : v)
{
cout <<vi << ' ';
}
cout << endl;
}
接着测试的是删除然后在打印一下,这里用的也是尾删,这个文档库里没有头插的但是有inster,也就是官方也不推荐用头插,因为消耗太大了,测试结果如下。

void Test1()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
v.push_back(6);
for (size_t i = 0; i < v.size(); i++)
{
cout << v[i] << ' ';
}
cout << endl;
vector<int>::iterator it = v.begin();
while (it != v.end())
{
cout << *it << ' ';
++it;
}
cout << endl;
for (auto vi : v)
{
cout <<vi << ' ';
}
cout << endl;
v.pop_back();
v.pop_back();
for (auto vi : v)
{
cout << vi << ' ';
}
cout << endl;
}
接着就是利用迭代器进行范围访问,这里就是利用v1迭代器的begin和end进行初始化v2,测试如下。

void Test2()
{
vector<int> v1(6, 6);
for (auto vi : v1)
{
cout << vi << " ";
}
cout << endl;
vector<int> v2(v1.begin(), v1.end());
for (auto vi : v2)
{
cout << vi << " ";
}
cout << endl;
}
这里是创建了一个字符串的对象,然后利用范围进行初始化v3,v3的类型是char,测试如下。
这里是利用rbegin和rend进行逆向打印,测试结果如下。

void Test3()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
v.push_back(6);
for (auto vi : v)
{
cout << vi << ' ';
}
cout << endl;
vector<int>::reverse_iterator rit = v.rbegin();
while (rit != v.rend())
{
cout << *rit << ' ';
++rit;
}
cout << endl;
}
这个是利用inster进行头插和删除测试如下。

void Test4()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
v.push_back(6);
for (auto vi : v)
{
cout << vi << ' ';
}
cout << endl;
vector<int>::reverse_iterator rit = v.rbegin();
while (rit != v.rend())
{
cout << *rit << ' ';
++rit;
}
cout << endl;
vector<int>::iterator pos = v.begin();
v.insert(pos, 6);
for (auto vi : v)
{
cout << vi << ' ';
}
cout << endl;
pos= v.begin();
v.erase(pos);
for (auto vi : v)
{
cout << vi << ' ';
}
cout << endl;
}
三、代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <vector>
#include<time.h>
using namespace std;void Test1()
{vector<int> v;v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);v.push_back(5);v.push_back(6);for (size_t i = 0; i < v.size(); i++){cout << v[i] << ' ';}cout << endl;vector<int>::iterator it = v.begin();while (it != v.end()){cout << *it << ' ';++it;}cout << endl;for (auto vi : v){cout <<vi << ' ';}cout << endl;v.pop_back();v.pop_back();for (auto vi : v){cout << vi << ' ';}cout << endl;
}void Test2()
{vector<int> v1(6, 6);for (auto vi : v1){cout << vi << " ";}cout << endl;vector<int> v2(v1.begin(), v1.end());for (auto vi : v2){cout << vi << " ";}cout << endl;string s1("hello world");vector<char> v3(s1.begin() + 2, s1.end() - 1);for (auto vi : v3){cout << vi << " ";}cout << endl;
}void Test3()
{vector<int> v;v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);v.push_back(5);v.push_back(6);for (auto vi : v){cout << vi << ' ';}cout << endl;vector<int>::reverse_iterator rit = v.rbegin();while (rit != v.rend()){cout << *rit << ' ';++rit;}cout << endl;
}void Test4()
{vector<int> v;v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);v.push_back(5);v.push_back(6);for (auto vi : v){cout << vi << ' ';}cout << endl;vector<int>::reverse_iterator rit = v.rbegin();while (rit != v.rend()){cout << *rit << ' ';++rit;}cout << endl;vector<int>::iterator pos = v.begin();v.insert(pos, 6);for (auto vi : v){cout << vi << ' ';}cout << endl;pos= v.begin();v.erase(pos);for (auto vi : v){cout << vi << ' ';}cout << endl;
}int main()
{Test4();return 0;
}
相关文章:
c++的学习之路:12、vector(1)
这章主要是根据cplusplus中的文档进行使用Vector,文章末附上测试代码。 目录 一、什么是vector 二、vector的简单使用 三、代码 一、什么是vector 下图是cplusplus的简介,上面一共有六点,如下: 1、vector是表示可变大小数组…...
2024.2.17力扣每日一题——N叉树的层序遍历
2024.2.17 题目来源我的题解方法一 广度优先搜索(队列实现) 题目来源 力扣每日一题;题序:429 我的题解 方法一 广度优先搜索(队列实现) 和二叉树的层序遍历相同,只是在添加子节点的细节有所不…...
滑动窗口(尺取法/Python)
滑动窗口(尺取法) 算法含义: 在解决关于区间特性的题目时保存搜索区间左右端点,然后根据实际要求不断更新左右端点位置的算法 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) 在历年真题…...
【打印SQL执行日志】⭐️Mybatis-Plus通过配置在控制台打印执行日志
目录 前言 一、Mybatis-Plus 开启日志的方式 二、测试 三、日志分析 章末 前言 小伙伴们大家好,相信大家平时在处理问题时都有各自的方式,最常用以及最好用的感觉还是断点调试,但是涉及到操作数据库的执行时,默认的话在控制台…...
Vue后台管理系统常用组件的优缺点分析
以下是Vue后台管理系统常用组件的优缺点分析: Element UI 优点: 丰富的组件库:Element UI 提供了大量的组件,包括表单、表格、弹窗、导航等,可以满足各种后台管理系统的需求。易于使用:Element UI 的组件…...
栈的应用——用栈实现算数混合运算表达式的计算
1、单目运算符双目运算符 算数运算符分为单目运算符和双目运算符等 单目运算符只需要一个操作数,双目运算符需要两个操作数 双目运算符最常见:常见的算术运算符:*/,比较运算符:<>=等等以下是一些单目运算符:正号 (+): 用于表示正数或给数值一个正号。例如:+5 仍然…...
动态规划—机器人移动问题(Java)
😀前言 机器人移动问题是一个经典的动态规划应用场景,它涉及到在给定范围内的位置上进行移动,并计算到达目标位置的方法数。本文将介绍三种解决这一问题的方法:暴力递归、缓存法和动态规划。通过比较不同方法的优缺点,…...
第十一届蓝桥杯物联网试题(省赛)
对于通信方面,还是终端A、B都保持接收状态,当要发送的数组不为空再发送数据,发送完后立即清除,接收数据的数组不为空则处理,处理完后立即清除,分工明确 继电器不亮一般可能是电压不够 将数据加空格再加\r…...
【Python基础教程】5. 数
🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:python基础教程 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、…...
Qt中出现中文乱码的原因以及解决方法
Qt专栏:http://t.csdnimg.cn/C2SDN 目录 1.引言 2.原因分析 3.源文件的编码格式修改方法 4.程序内部使用的默认编码格式修改方法 5.QString转std::string的方法 6.总结 1.引言 在编写Qt程序的时候,或多或少都可能遇到用QString时候,明明…...
Linux 文件相关命令
一、查看文件命令 1)浏览文件less 默认查看文件的前 10 行。 less /etc/services ##功能说明: #1.默认打开首屏内容 #2.按【回车】按行访问 #3.按【空格】按屏访问 #4.【从上向下】搜索用/111,搜索包含111的内容,此时按n继续向下搜&#x…...
K8S Deployment 简介, 1个简单的Kubernetes Deployment YAML 文件
当谈到 Kubernetes 集群中的应用程序部署和管理时,Deployment、ReplicaSet 和 Pod 是三个重要的概念。它们之间存在一定的关系和层次结构。下面是对 Deployment、ReplicaSet 和 Pod 的详细解释以及它们之间的关系。 Deployment(部署) Deploy…...
win11安装WSL UbuntuTLS
win11安装WSL WSL 简介WSL 1 VS WSL 2先决要求安装方法一键安装通过「控制面板」安装 WSL 基本命令Linux发行版安装Ubuntu初始化相关设置root用户密码网络工具安装安装1panel面板指导 WSl可视化工具问题总结WSL更新命令错误Ubuntu 启动初始化错误未解决问题 WSL 简介 Windows …...
第十题:金币
题目描述 国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到…...
Windows 11 中Docker的安装教程
选择正确的Docker版本 在Windows上,你可以安装两种类型的Docker:Docker Desktop和Docker Toolbox。Docker Desktop是针对Windows 10 Pro、Enterprise和Education版本的,这些版本内置了Hyper-V虚拟化支持。对于旧版本的Windows,比…...
纯C代码模板
一、快排 void QuickSort(int *a,int left,int right){if(left>right) return;else{int low left,high right;int pivot a[low];while(low<high){while(a[high] > pivot && low < high){high--;}a[low] a[high]; //必须先动a[low]while(a[low] < …...
二、GitLab相关操作
GitLab相关操作 一、组、用户、项目管理1.创建组2.创建项目3.创建用户并分配组3.1 创建用户3.2 设置密码3.3 给用户分配组 二、拉取/推送代码1.配置ssh(第一次需要)1.1 创建一个空文件夹1.2 配置本地仓账号和邮箱1.3 生成ssh公钥密钥1.4 gitlab配置公钥 2.拉取代码3.推送代码3.…...
【详细注释+流程讲解】基于深度学习的文本分类 TextCNN
前言 这篇文章用于记录阿里天池 NLP 入门赛,详细讲解了整个数据处理流程,以及如何从零构建一个模型,适合新手入门。 赛题以新闻数据为赛题数据,数据集报名后可见并可下载。赛题数据为新闻文本,并按照字符级别进行匿名…...
Day.21
interface MyInterface{public final static int PI 3;void show();public default void printX(){System.out.println("接口默认方法");}public static void printY(){System.out.println("接口静态方法");}}class MyClass implements MyInterface{publi…...
Spring-IoC 基于注解
基于xml方法见:http://t.csdnimg.cn/dir8j 注解是代码中的一种特殊标记,可以在编译、类加载和运行时被读取,执行相应的处理,简化 Spring的 XML配置。 格式:注解(属性1"属性值1",...) 可以加在类上…...
文脉定序保姆级教程:Mac M2/M3芯片本地部署BGE-Reranker-v2-m3
文脉定序保姆级教程:Mac M2/M3芯片本地部署BGE-Reranker-v2-m3 你是否遇到过这样的烦恼?用自己搭建的知识库或者搜索引擎提问,它确实返回了一堆结果,但最相关的答案往往不在最前面,你需要像淘金一样在一堆信息里费力筛…...
SlickEdit 2022破解版在Ubuntu上的替代方案:合法免费编辑器推荐
Ubuntu开发者必备:5款媲美SlickEdit的合法代码编辑器深度评测 在Linux开发环境中,代码编辑器如同工匠的凿刀,直接影响着开发效率和体验。SlickEdit以其强大的跨平台支持和专业级功能著称,但商业授权费用让不少独立开发者和初创团队…...
如何同时降AI率和降重?一套操作解决两个问题
如何同时降AI率和降重?一套操作解决两个问题 我改了三遍论文,AI率从45%涨到了62%,查重率也没降下来。后来才搞明白,降AI和降重根本不是两件事,用对工具可以一套操作同时搞定。核心方法就是:选一个同时支持…...
ChatTTS本地离线版本:从零搭建到性能优化的完整指南
最近在做一个需要语音合成的项目,用了一段时间的在线TTS服务,比如一些大厂提供的API。用起来是方便,但问题也慢慢暴露出来了:网络请求总有延迟,合成一句话要等个一两秒,体验很割裂;更关键的是&a…...
Autosar NVM配置参数
1.NvM_BlockIdType NvM_BlockIdType 是 AUTOSAR NVRAM Manager (NvM) 模块中的核心数据类型,用于唯一标识一个NVRAM数据块。 属性 说明 用途 唯一标识一个NvM Block(NVRAM数据块) 范围 0 ~ (总Block数-1),其中 0 和 1 保留 配置来源 由NvM模块配置工具(如EB treso…...
梯形图转C后PLC宕机?别怪编译器!用这4个AST节点校验点+1张转换映射热力图,5分钟定位逻辑偏移根源
第一章:梯形图转C后PLC宕机?别怪编译器!用这4个AST节点校验点1张转换映射热力图,5分钟定位逻辑偏移根源当梯形图(LAD)经自动化工具转换为C代码部署至嵌入式PLC后突发宕机,多数工程师第一反应是质…...
最新!2026年3月OpenClaw(Clawdbot)本地8分钟超简单部署教程
最新!2026年3月OpenClaw(Clawdbot)本地8分钟超简单部署教程。本文面向零基础用户,完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw(Clawdbot)的流程,包含环境配置、服务启…...
VS Code 将机器控制权全盘交给 AI 后,竟警告用户不要信任它
十年按月更新,只用一周,就把整个开发关系改写了。2026 年 3 月 9 日,微软发布了 VS Code 1.111,这是它第一次以“每周稳定版”的节奏对外推送更新。微软杰出工程师 Kai Maetzel 当时提到,原本集中进行的 endgame 测试&…...
SEO_掌握这七个SEO技巧,让你的流量持续增长
SEO技巧一:优化网站的关键词在当今互联网时代,网站的关键词优化是提升网站流量的重要手段之一。我们需要明确什么是关键词。关键词是用户在搜索引擎中输入的词语,用以查找相关信息的关键字。如果你的网站能够在这些关键词的搜索结果中排名靠前…...
基于微信平台的“快一点”外送系统的设计与实现
目录 可选框架 可选语言 内容 可选框架 J2EE、MVC、vue3、spring、springmvc、mybatis、SSH、SpringBoot、SSM、django 可选语言 java、web、PHP、asp.net、javaweb、C#、python、 HTML5、jsp、ajax、vue3 内容 随着移动用户端的普及,微信因为其简单&#x…...
