C++Vector浅析,Vector用法大全

2023-05-16

vector基本概念

  • 功能:

vector数据结构和数组非常相似,也成为单端数组

  • vector与普通数组的区别:

不同之处在与数组是静态空间,而vector可以动态扩展

  • 动态扩展:

并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间

  • vector容器的迭代器是支持随机访问的迭代器

vector构造函数

  • vector<T>v;        //采用类模板实现类实现,默认构造函数(无参构造)

        例如:vector<int>v1;

  • vector(v.begin(),v.end());        //将v [ begin(),end() ) 区间中的元素拷贝给本身

        例如:vector<int>v2(v1.begin(),v1.end());

  • vector(n,elem);        //构造函数将n个elem拷贝给本身

        例如:vector<int>v3(10,100);

  • vector(const vector & vec);        //拷贝构造函数

        例如:vector<int>v4(v3);

vector赋值操作

  • vector & operator=(const vector & vec);        //重载等号操作符

        例如:v2 = v1;

  • assign(beg,end);        //将[ beg,end )区间中的数据拷贝复制给本身

        例如:v2.assign( v1.begin(),v1.end() );

  • assign(n,elem);        //将n个elem拷贝复制给本身

        例如:v2.assign(10,100);

vector的遍历

建立一个vector:

vector<int>v;
v.pushback(10);
v.pushback(20);
v.pushback(30);
v.pushback(40);

遍历方式1:

vector<int>::iterator itBegin=v.begin();//起始迭代器  指向容器中第一个元素
vector<int>::iterator itEnd=v.end();//结束迭代器  指向容器中最后一个元素的下一个位置

while(itBegin!=itEnd)
{
    cout<<*itBegin<<endl;
    itBegin++;
}

遍历方式2:

for(vector<int>::iterator it=v.begin();it!=v.end();it++)
{
    cout<<*it<<endl;
}

遍历方式3:

for_each(v.begin(),v.end(),myPrint);//起始位置和函数名

void myPrint(int var)
{
    cout<<var<<endl;
}

vector储存自定义数据类型

建立一个自定义数据类型Person类:

class Person
{
public:
    Person(string name,int age)
    {
        this->myName=name;
        this->myAge=age;
    }
    string myName;
    int myAge;
};

存放自定义数据类型:

vector<Person>v;

Person p1("aaa",10);
Person p2("bbb",20);
Person p3("ccc",30);

//向容器中添加数据:
v.pushback(p1);
v.pushback(p2);
v.pushback(p3);

//遍历容器中的数据:
for(vector<Person>::iterator it=v.begin();it!=v.end();it++)
{
    cout<<"姓名:"<<(*it).myName<<" 年龄:"<<(*it).myAge<<endl;
    //cout<<"姓名:"<<it->myName<<" 年龄:"<<it->myAge<<endl;
}

存放自定义数据类型的指针

vector<Person*>v;

Person p1("aaa",10);
Person p2("bbb",20);
Person p3("ccc",30);

//向容器中添加数据:
v.pushback(&p1);
v.pushback(&p2);
v.pushback(&p3);

//遍历容器中的数据:
for(vector<Person>::iterator it=v.begin();it!=v.end();it++)
{
    cout<<"姓名:"<<(*it)->myName<<" 年龄:"<<(*it)->myAge<<endl;
}

vector容器嵌套容器

vector<vector<int>>v;

//创建小容器:
vector<int>v1;
vector<int>v2;
vector<int>v3;
vector<int>v4;

//向小容器中添加数据
for(int i=0;i<4;i++)
{
    v1.pushback(i+1);
    v2.pushback(i+2);
    v3.pushback(i+3);
    v4.pushback(i+4);
}

//将小容器插入到大容器中
{
    v.pushback(v1);
    v.pushback(v2);
    v.pushback(v3);
    v.pushback(v4);
}

//通过大容器,把所有数据遍历一遍
for(vector<vector<int>>::iterator it=v.begin();it!=v.end();it++)
{
    //(*it)---容器vector<int>
    for(vector<int>::iterator vit=(*it).begin();vit!=end();vit++)
    {
        cout<<*vit<<" ";
    }
    cout<<endl;
}

vector容量和大小

  • empty();        //判断容器是否为空
  • capacity();        //容器的容量
  • size();        //返回容器中元素的个数

        容量始终大于等于容器中元素的个数(动态规划)

  • resize(int num);        //重新指定容器的长度为num,若容器变长以默认值0填充新位置。
  •                                  //如果容器变短,则末尾超出容器长度的元素将被删除。
  • resize(int num,elem);     //重新指定容器的长度为num,若容器变长以elem值填充新位置
  •                                        //如果容器变短,则末尾超出容器长度的元素将被删除。

vector插入和删除

  • push_back(elem);        //尾部插入元素elem
  • pop_back();        //删除最后一个元素
  • insert(const_iterator pos,elem);        //迭代器指向位置pos插入元素elem

        例如:v1.insert(v1.begin(),100);

  • insert(const_iterator pos,int count,elem)        //迭代器指向位置pos插入count个元素elem

        例如:v1.insert(v1.begin(),2,100);

  • erase(const_iterator pos);        //删除迭代器指向的元素

        例如:v1.erase(v1.begin());

  • erase(const_iterator start,const_iterator end);        //删除迭代器从start到end之间的元素

        例如:v1.erase(v1.begin(),v1.end());//这一行代码相当于清空,若输出v1则只会有空格

        注意:插入与删除用法的第一个参数是迭代器

  • clear();        //删除容器中所有的元素        

        例如:v1.clear();

vector数据存取

  • at(int dex)        //返回索引dex所指的数据

        例如:for(int i=0;i<10;i++)cout<<v1.at( i )<<"   ";

  • operator[ ];        //返回索引dex所指的数据

        例如:for(int i=0;i<10;i++)cout<<v1[ i ]<<"   ";

  • front( );        //返回容器中第一个数据元素
  • back( );        ///返回容器中最后一个数据元素

vector互换容器

  • swap(vec)        //将vec与本身的元素互换

例如:v1.swap(v2);

实际用途:收缩内存(把大空间变成小空间)

原理:建立匿名对象——vector<int>(v).swap(v);

编译器会建立一个新的容器(容器大小与大空间中元素个数相同),再把原空间与匿名空间元素进行交换,以此达到”瘦身“的目的,原空间将会自动回收。

vector预留空间

  • 功能:减少vector在动态扩展容量时的扩展次数
  • 函数原型:reserve(int len);//容器预留len个元素长度,预留位置不初始化,元素不可访问。
  • 不断在vector容器中存放数据时,vector由于原有容量不够而进行扩展时会存在不断的开辟与收回空间的过程,利用预留空间函数便可减少开辟空间的次数进而提高代码效率。

        例如:v.reverse(10000);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++Vector浅析,Vector用法大全 的相关文章

  • 速腾Helios-16P使用Lego-loam实时构建点云地图(二)——Lego-loam的编译与运行

    目录 运行环境 xff1a 一 源码及数据集下载 二 编译问题 1 C 43 43 14环境问题 2 报错 xff1a Index is not a member of Eigen 3 OpenCV版本 4 usr bin ld 找不到 三
  • 速腾Helios-16P使用Lego-loam实时构建点云地图(三)——使用雷达实时运行lego-loam

    当确定好雷达正常运行 lego loam正常运行后 xff0c 就可以开始使用雷达实时运行lego loam了 步骤一 xff1a 连接硬件 步骤二 xff1a 修改电脑IP地址 用完雷达记得将设置中有线地址选择之前的默认地址 xff0c
  • 串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】

    xff08 1 xff09 I2C 集成电路互连总线接口 Inter IC xff1a 同步串行半双工传输总线 xff0c 连接嵌入式处理器及其外围器件 支持器件 xff1a LCD驱动器 Flash存储器 特点 有两根传输线 xff08
  • Pyhton request模拟浏览器登录(过程、我踩过的坑及解决方式)

    过程 xff08 后表示代码中的操作 xff09 f12 gt network gt ctrl 43 R 登录 gt 输入账号 密码 gt 确定 在network中找到login 需要它的 请求标头 和 url xff09 准备 sessi
  • SpringSecurity用户密码验证过程

    SpringSecurity过滤链当中的UsernamePasswordAuthenticationFilter负责登陆密码验证 AbstractAuthenticationProcessingFilter是UsernamePassword
  • 项目实战:基于 TCP 的局域网内高性能文件传输系统设计与实现

    0 写在前面1 系统设计目标2 系统整体设计思路 2 1 网络传输协议的选择与通信协议的设计2 2 数据库设计 3 上传 下载文件的设计方案4 断点续传的原理及设计5 秒传的原理及设计6 数据库设计 API 编程与 shell 脚本的结合7
  • 进程与线程学习心得

    一 进程与线程的区别 1 进程是操作系统进行资源调度和分配的基本单位 线程是操作系统可执行的最小调度和分配单位 2 一个线程属于一个进程 一个进程可以有多个线程 3 一个进程崩溃不影响其他进程 但是一个线程崩溃会让进程崩溃 4 进程在执行过
  • 《网络编程》C语言 创建TCP服务器(三种)

    一 循环服务器 伪代码 xff1a sfd 61 socket bind listen while 1 newfd 61 accept while 1 recv send close newfd
  • 《网络编程》C语言 使用select函数搭建TCP客户端和服务器

    IO 多路复用概念 1 允许同时多个 IO 进行操作 xff0c 内核一旦发现进程执行一个或多个 IO 事件 xff0c 就会通知该进程 2 应用程序中同时需要处理多路输入输出流 select 功能 xff1a 让内核监听指定集合中的文件描
  • ubuntu下切换python版本(python2与python3之间的切换,python3与python3之间的切换)

    目录 1 问题2 重装python3 83 配置 python3 8 为系统默认 python34 切换回系统自带的python3 1 问题 有点无语 xff0c python3 8明明下载安装好 但是设置python默认版本为python
  • Ubuntu22.04中解决mNetassist无法打开问题

    因为本人在安装mNetassist遇到很多问题 xff0c 也是查找了很多资料 xff0c 最终解决了问题 因为每个人遇到的问题会有所不同 xff0c 故把本人的安装经历记录下来 xff0c 以供参考 大家可参考的文章是这篇 xff0c 但
  • C++中常用的库函数 (自用)

    常用的库函数 一 前言二 内容1 sort 题目 2 upper bound 与lower bound 题目 3 to string 4 string 内嵌的 find 函数 注 xff1a vector无find 函数5 大小写转换 to
  • 四轴飞行器PID调参建议

    在动态控制中 xff0c 我们通过调整PID三个参数来获得动力 xff0c 同时消除振荡 xff0c 找到对你当前的飞行场景来说更优的手感 P xff08 Propotional xff09 是比例的简称 P 单元控制着控制系统的所有动力
  • C语言string库strcpy、strcmp、strcat函数详解

    strcpy 即string copy 语法格式为strcpy str1 str2 作用是将str2赋值给str1 使用方法类似于 char str1 10 str2 61 34 abc 34 strcpy str1 34 bcd 34 s
  • VScode常用快捷键、

    VScode常用快捷键 xff1a 英文 按回车enter xff1a 会快速打出html 后缀名 自行填写 shift xff0b alt xff08 鼠标放在复制行代码区 xff0c 或者鼠标选择区域 xff09 按控制 向下 键 xf
  • 深入了解运行时栈(C语言)

    文章目录 运行时栈函数的栈帧寄存器与机器指令寄存器 xff1a 机器指令 程序计数器控制转移数据传送参数的传递返回值的传递 举例 xff1a 函数栈帧创建和销毁的全过程小结 运行时栈 栈是一种数据结构 xff1a 我们可以向这种结构中存入数
  • 小四轴调试记录

    从准备理论到实际动手调试大约耗时半年吧 xff0c 期间看了很多理论知识 xff0c 惯性导航方面的文章 至于为什么选择从小四轴入手 xff0c 当时的理由很简单 xff1a 1 便宜 xff0c 2 空心杯电机虽然有刷会坏但便宜 xff0
  • 登录 账号密码验证

    lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt meta http equiv 61 34 X U
  • 关于C++变量重复定义

    本人是刚入学的大一计算机类学生 xff0c 最近在学习C 43 43 xff0c 在回顾这个代码时候发现 xff0c 这个重复定义i和j会导致之前定义的全局变量i和j并不能起作用 xff0c 现在还不太清楚为什么 xff0c 请小伙伴们注意
  • OpenMV——色块识别

    OpenMV有很多示例代码 xff0c 下面是我学习过程中有关知识的总结 目录 前言 一 阈值选择 二 代码 前言 函数RGB 255 0 0 表示的是红色 RGB 255 0 0 含义 xff1a 红色值 Red 61 255 xff1b

随机推荐

  • 链表的概念以及相关基础操作

    前言 xff1a 链表是数据结构里面最开始的章节 xff0c 也是对新手的理解有困难的第一章 笔者大二下学校才开设数据结构 xff0c 以防自己忘记 xff0c 遂记录之 链表的概念 xff1a 链表是一种物理存储单元上非连续 非顺序的存储
  • Sqoop数据导入 第2关:Mysql导入数据至HDFS上

    为了完成本关任务 你需要掌握 1 数据库 MySQL 建表 2 Mysql 数据导入至 HDFS 中 数据库 MySQL 建表 用命令进入 MySQL 客户端 mysql uroot p123123 h127 0 0 1 创建数据库hdfs
  • 一、单链表创建以及操作

    链表操作全内容 xff1a 1 xff0c 链表创建 2 xff0c 创建头结点 xff08 赋值 xff09 3 xff0c 输出当前链表 4 xff0c 连接节点形成链表 5 xff0c 插入节点函数 6 xff0c 删除节点函数 7
  • STL常用的容器

    STL常用容器 目录 STL常用容器vector容器pair c 43 43 内置二元组 不需要头文件stringqueue 队列priority queue 优先队列stack 栈deque 双端队列 速度异常的慢set map mult
  • Ubuntu网页连接失败的解决方法

    问题如下 xff1a 一 首先你要先检查自己的Ubuntu是否能连接上网络 二 在确保自己能连接上网络时 xff0c 网页连接失败的原因可能是你的Firefox浏览器的默认搜索引擎时Google xff0c 只需要在网页设置 搜索 中将搜索
  • Hal库_stm32开发之串口IDLE空闲中断+DMA接收不定长数据并修改数据

    本文写自于博主编写平衡智能车程序的时候 xff0c 由于中断使用的较多 xff0c 如定时器中断 xff0c 串口中断等等 为了避免MCU运行程序时卡死 xff0c 我就将串口中断改为串口IDLE空闲接收中断 可以实现不定长数据的接收 xf
  • PCB学习(一)——立创EDA边框设置

    一 伴随原理图转PCB生成的边框 通过在 原理图界面 点击 设计 下的 原理图转PCB xff08 Alt 43 P xff09 xff0c 可以得到如下 矩形边框 二 PCB界面设置边框 在 PCB界面 点击 工具 下的 边框设置 xff
  • c++模板类/模板函数的声明与定义应该放在头文件里

    c 43 43 模板类 模板函数的声明与定义应该放在头文件里 xff0c 不要分开来写类中函数的声明与定义 xff08 比如在 H文件里声明某个成员函数 xff0c 在 CPP文件里定义该成员函数 xff09 xff0c 这样会导致连接错误
  • STM32的GPIO端口配置八种模式的理解

    文章目录 一 GPIO的结构框图二 八种模式1 模拟输入 xff08 GPIO Mode AIN xff09 2 浮空输入 xff08 GPIO Mode IN FLOATING xff09 3 上拉输入 xff08 GPIO Mode I
  • ESP32 micro-usb 多数据量并简单加密的串口通信

    文章目录 前言一 ESP32和上位机的环境二 上位机部分1 串口通信的准备2 数据的准备与发送 三 下位机部分1 ESP32串口通信准备2 数据的接收四 同时测试 总结 前言 最近在研究单片机与上位机的串口通信 xff0c 刚好手头有一块E
  • boost之跨平台 错误处理

    system C 43 43 中处理错误的最佳方式是使用异常 xff0c 但操作系统和许多底层AP工不具有这个能力 xff0c 它们一般使用更通用也更难以操作的错误代码来表示出错的原因 xff0c 不同的操作系统的错误代码通常不是兼容的 x
  • 记录一下vector基本用法(简单易懂)

    vector容器的初始化 vector的使用首先需要加一个头文件 include lt vector gt xff1b vector lt int gt a 最一般的初始化方法 xff0c 就是定义一个容器啊a xff1b vector l
  • MPU6050基本原理介绍及程序配置

    一 MPU6050简介 1 内部主要结构 xff1a 陀螺仪 加速度计 数字运动处理器DMP xff08 Digital Motion Processor xff09 PS MPU6050还含有第二IIC接口 xff0c 用于连接一个 第三
  • Robomaster上位机视觉摘要——比赛规则篇

    本文是笔者多日来总结的2023赛季中针对上位机组的比赛规则摘要 xff0c 力求一文让你看懂上位机在赛场中的飒爽身影 目录 电力元件 电池 遥控器 激光 涂装 机器人 飞镖 雷达 空中机器人 工程机器人 哨兵机器人 英雄与步兵机器人 视觉应
  • C语言:结构体——关于内存字节对齐图文详解

    前言 xff1a 我们在学到c语言内存管理的时候总是一遍惊叹 xff0c 其聪明的内存管理策略 xff0c 一遍抱怨其难以理解的方法 xff0c 网上的资料要不讲究的太详细 xff0c 要不没能讲解清楚 xff0c 今天我们根据实例来学习一
  • 结构体+联合体 详解

    文章目录 一 结构体1 结构体变量2 特殊声明3 结构体的引用1 嵌套调用2 自引用 三 结构体的初始化四 结构体的内存对齐1 用法2 练习题3 修改对齐数 五 位段1 用法2 练习题 六 联合体1 用法2 练习题1 正常算法题2 用联合体
  • Ubuntu20.04——一篇文章让你从零配置VINS_Mono环境以及运行(2023年最新)

    注 xff1a 文末包含该文章涉及的所有安装包的网盘链接 零 换源 xff08 也可以先不换 xff0c 后面觉得下载慢再换也行 xff09 1 备份原来的源 sudo cp etc apt sources list etc apt sou
  • 学C语言推荐的书和软件—C Primer Plus和Dev C++

    写这个的目的是复习巩固C Primer Plus的知识 xff0c 我会一直更新这个系列 对于这本书 xff0c 入门C语言是完全够了 xff0c 后面的链表 队列和二叉树比较综合 xff0c 难度大一些 用这本书学C语言非常好 xff0c
  • mavlink python

    from pymavlink import mavutil Create the connection m 61 mavutil mavlink connection 39 udpin 0 0 0 0 14550 39 dir m mav
  • C++Vector浅析,Vector用法大全

    vector基本概念 功能 xff1a vector数据结构和数组非常相似 xff0c 也成为单端数组 vector与普通数组的区别 xff1a 不同之处在与数组是静态空间 xff0c 而vector可以动态扩展 动态扩展 xff1a 并不