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

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&#xff0c;文章末附上测试代码。 目录 一、什么是vector 二、vector的简单使用 三、代码 一、什么是vector 下图是cplusplus的简介&#xff0c;上面一共有六点&#xff0c;如下&#xff1a; 1、vector是表示可变大小数组…...

2024.2.17力扣每日一题——N叉树的层序遍历

2024.2.17 题目来源我的题解方法一 广度优先搜索&#xff08;队列实现&#xff09; 题目来源 力扣每日一题&#xff1b;题序&#xff1a;429 我的题解 方法一 广度优先搜索&#xff08;队列实现&#xff09; 和二叉树的层序遍历相同&#xff0c;只是在添加子节点的细节有所不…...

滑动窗口(尺取法/Python)

滑动窗口&#xff08;尺取法&#xff09; 算法含义&#xff1a; 在解决关于区间特性的题目时保存搜索区间左右端点&#xff0c;然后根据实际要求不断更新左右端点位置的算法 时间复杂度&#xff1a; O ( n ) O(n) O(n) 空间复杂度&#xff1a; O ( 1 ) O(1) O(1) 在历年真题…...

【打印SQL执行日志】⭐️Mybatis-Plus通过配置在控制台打印执行日志

目录 前言 一、Mybatis-Plus 开启日志的方式 二、测试 三、日志分析 章末 前言 小伙伴们大家好&#xff0c;相信大家平时在处理问题时都有各自的方式&#xff0c;最常用以及最好用的感觉还是断点调试&#xff0c;但是涉及到操作数据库的执行时&#xff0c;默认的话在控制台…...

Vue后台管理系统常用组件的优缺点分析

以下是Vue后台管理系统常用组件的优缺点分析&#xff1a; Element UI 优点&#xff1a; 丰富的组件库&#xff1a;Element UI 提供了大量的组件&#xff0c;包括表单、表格、弹窗、导航等&#xff0c;可以满足各种后台管理系统的需求。易于使用&#xff1a;Element UI 的组件…...

栈的应用——用栈实现算数混合运算表达式的计算

1、单目运算符双目运算符 算数运算符分为单目运算符和双目运算符等 单目运算符只需要一个操作数,双目运算符需要两个操作数 双目运算符最常见:常见的算术运算符:*/,比较运算符:<>=等等以下是一些单目运算符:正号 (+): 用于表示正数或给数值一个正号。例如:+5 仍然…...

动态规划—机器人移动问题(Java)

&#x1f600;前言 机器人移动问题是一个经典的动态规划应用场景&#xff0c;它涉及到在给定范围内的位置上进行移动&#xff0c;并计算到达目标位置的方法数。本文将介绍三种解决这一问题的方法&#xff1a;暴力递归、缓存法和动态规划。通过比较不同方法的优缺点&#xff0c;…...

第十一届蓝桥杯物联网试题(省赛)

对于通信方面&#xff0c;还是终端A、B都保持接收状态&#xff0c;当要发送的数组不为空再发送数据&#xff0c;发送完后立即清除&#xff0c;接收数据的数组不为空则处理&#xff0c;处理完后立即清除&#xff0c;分工明确 继电器不亮一般可能是电压不够 将数据加空格再加\r…...

【Python基础教程】5. 数

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;python基础教程 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、…...

Qt中出现中文乱码的原因以及解决方法

Qt专栏&#xff1a;http://t.csdnimg.cn/C2SDN 目录 1.引言 2.原因分析 3.源文件的编码格式修改方法 4.程序内部使用的默认编码格式修改方法 5.QString转std::string的方法 6.总结 1.引言 在编写Qt程序的时候&#xff0c;或多或少都可能遇到用QString时候&#xff0c;明明…...

Linux 文件相关命令

一、查看文件命令 1&#xff09;浏览文件less 默认查看文件的前 10 行。 less /etc/services ##功能说明&#xff1a; #1.默认打开首屏内容 #2.按【回车】按行访问 #3.按【空格】按屏访问 #4.【从上向下】搜索用/111,搜索包含111的内容&#xff0c;此时按n继续向下搜&#x…...

K8S Deployment 简介, 1个简单的Kubernetes Deployment YAML 文件

当谈到 Kubernetes 集群中的应用程序部署和管理时&#xff0c;Deployment、ReplicaSet 和 Pod 是三个重要的概念。它们之间存在一定的关系和层次结构。下面是对 Deployment、ReplicaSet 和 Pod 的详细解释以及它们之间的关系。 Deployment&#xff08;部署&#xff09; Deploy…...

win11安装WSL UbuntuTLS

win11安装WSL WSL 简介WSL 1 VS WSL 2先决要求安装方法一键安装通过「控制面板」安装 WSL 基本命令Linux发行版安装Ubuntu初始化相关设置root用户密码网络工具安装安装1panel面板指导 WSl可视化工具问题总结WSL更新命令错误Ubuntu 启动初始化错误未解决问题 WSL 简介 Windows …...

第十题:金币

题目描述 国王将金币作为工资&#xff0c;发放给忠诚的骑士。第一天&#xff0c;骑士收到一枚金币&#xff1b;之后两天&#xff08;第二天和第三天&#xff09;&#xff0c;每天收到两枚金币&#xff1b;之后三天&#xff08;第四、五、六天&#xff09;&#xff0c;每天收到…...

Windows 11 中Docker的安装教程

选择正确的Docker版本 在Windows上&#xff0c;你可以安装两种类型的Docker&#xff1a;Docker Desktop和Docker Toolbox。Docker Desktop是针对Windows 10 Pro、Enterprise和Education版本的&#xff0c;这些版本内置了Hyper-V虚拟化支持。对于旧版本的Windows&#xff0c;比…...

纯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 入门赛&#xff0c;详细讲解了整个数据处理流程&#xff0c;以及如何从零构建一个模型&#xff0c;适合新手入门。 赛题以新闻数据为赛题数据&#xff0c;数据集报名后可见并可下载。赛题数据为新闻文本&#xff0c;并按照字符级别进行匿名…...

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方法见&#xff1a;http://t.csdnimg.cn/dir8j 注解是代码中的一种特殊标记&#xff0c;可以在编译、类加载和运行时被读取&#xff0c;执行相应的处理&#xff0c;简化 Spring的 XML配置。 格式&#xff1a;注解(属性1"属性值1",...) 可以加在类上…...

文脉定序保姆级教程:Mac M2/M3芯片本地部署BGE-Reranker-v2-m3

文脉定序保姆级教程&#xff1a;Mac M2/M3芯片本地部署BGE-Reranker-v2-m3 你是否遇到过这样的烦恼&#xff1f;用自己搭建的知识库或者搜索引擎提问&#xff0c;它确实返回了一堆结果&#xff0c;但最相关的答案往往不在最前面&#xff0c;你需要像淘金一样在一堆信息里费力筛…...

SlickEdit 2022破解版在Ubuntu上的替代方案:合法免费编辑器推荐

Ubuntu开发者必备&#xff1a;5款媲美SlickEdit的合法代码编辑器深度评测 在Linux开发环境中&#xff0c;代码编辑器如同工匠的凿刀&#xff0c;直接影响着开发效率和体验。SlickEdit以其强大的跨平台支持和专业级功能著称&#xff0c;但商业授权费用让不少独立开发者和初创团队…...

如何同时降AI率和降重?一套操作解决两个问题

如何同时降AI率和降重&#xff1f;一套操作解决两个问题 我改了三遍论文&#xff0c;AI率从45%涨到了62%&#xff0c;查重率也没降下来。后来才搞明白&#xff0c;降AI和降重根本不是两件事&#xff0c;用对工具可以一套操作同时搞定。核心方法就是&#xff1a;选一个同时支持…...

ChatTTS本地离线版本:从零搭建到性能优化的完整指南

最近在做一个需要语音合成的项目&#xff0c;用了一段时间的在线TTS服务&#xff0c;比如一些大厂提供的API。用起来是方便&#xff0c;但问题也慢慢暴露出来了&#xff1a;网络请求总有延迟&#xff0c;合成一句话要等个一两秒&#xff0c;体验很割裂&#xff1b;更关键的是&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分钟定位逻辑偏移根源

第一章&#xff1a;梯形图转C后PLC宕机&#xff1f;别怪编译器&#xff01;用这4个AST节点校验点1张转换映射热力图&#xff0c;5分钟定位逻辑偏移根源当梯形图&#xff08;LAD&#xff09;经自动化工具转换为C代码部署至嵌入式PLC后突发宕机&#xff0c;多数工程师第一反应是质…...

最新!2026年3月OpenClaw(Clawdbot)本地8分钟超简单部署教程

最新&#xff01;2026年3月OpenClaw&#xff08;Clawdbot&#xff09;本地8分钟超简单部署教程。本文面向零基础用户&#xff0c;完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw&#xff08;Clawdbot&#xff09;的流程&#xff0c;包含环境配置、服务启…...

VS Code 将机器控制权全盘交给 AI 后,竟警告用户不要信任它

十年按月更新&#xff0c;只用一周&#xff0c;就把整个开发关系改写了。2026 年 3 月 9 日&#xff0c;微软发布了 VS Code 1.111&#xff0c;这是它第一次以“每周稳定版”的节奏对外推送更新。微软杰出工程师 Kai Maetzel 当时提到&#xff0c;原本集中进行的 endgame 测试&…...

SEO_掌握这七个SEO技巧,让你的流量持续增长

SEO技巧一&#xff1a;优化网站的关键词在当今互联网时代&#xff0c;网站的关键词优化是提升网站流量的重要手段之一。我们需要明确什么是关键词。关键词是用户在搜索引擎中输入的词语&#xff0c;用以查找相关信息的关键字。如果你的网站能够在这些关键词的搜索结果中排名靠前…...

基于微信平台的“快一点”外送系统的设计与实现

目录 可选框架 可选语言 内容 可选框架 J2EE、MVC、vue3、spring、springmvc、mybatis、SSH、SpringBoot、SSM、django 可选语言 java、web、PHP、asp.net、javaweb、C#、python、 HTML5、jsp、ajax、vue3 内容 随着移动用户端的普及&#xff0c;微信因为其简单&#x…...