C++ vector类学习笔记

IMU数据处理避坑指南:从理论到实践的加速度计重力消除方案 本文详细解析了IMU数据处理中的重力消除技术,从理论基础到实践应用,涵盖了加速度计和陀螺仪的核心问题。通过ROS2实战案例,介绍了静态标定与动态校准的技术对比,以及多传感器融合的进阶策略,帮助开发者避免常见陷阱,提升IMU数据处理的精度和效率。 阅读详情
  vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.

     用法:

          1.文件包含:     

           首先在程序开头处加上#include<vector>以包含所需要的类文件vector

          还有一定要加上using namespace std;

 

          2.变量声明:

               2.1 例:声明一个int向量以替代一维的数组:vector <int> a;(等于声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除)。

               2.2 例:用vector代替二维数组.其实只要声明一个一维数组向量即可,而一个数组的名字其实代表的是它的首地址,所以只要声明一个地址的向量即可,即:vector <int *> a.同理想用向量代替三维数组也是一样,vector <int**>a;再往上面依此类推.

 

          3.具体的用法以及函数调用:

          3.1 如何得到向量中的元素?其用法和数组一样:

          例如:

          vector <int *> a

          int b = 5;

          a.push_back(b);//该函数下面有详解

          cout<<a[0];       //输出结果为5

1.push_back   在数组的最后添加一个数据
2.pop_back    去掉数组的最后一个数据 
3.at                得到编号位置的数据
4.begin           得到数组头的指针
5.end             得到数组的最后一个单元+1的指针
6.front        得到数组头的引用
7.back            得到数组的最后一个单元的引用
8.max_size     得到vector最大可以是多大
9.capacity       当前vector分配的大小
10.size           当前使用数据的大小
11.resize         改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
12.reserve      改变当前vecotr所分配空间的大小
13.erase         删除指针指向的数据项
14.clear          清空当前的vector
15.rbegin        将vector反转后的开始指针返回(其实就是原来的end-1)
16.rend          将vector反转构的结束指针返回(其实就是原来的begin-1)
17.empty        判断vector是否为空
18.swap         与另一个vector交换数据

 

         3.2  详细的函数实现功能:其中vector<int> c.

                             c.clear()         移除容器中所有数据。

                             c.empty()         判断容器是否为空。

                             c.erase(pos)        删除pos位置的数据

                             c.erase(beg,end) 删除[beg,end)区间的数据

                             c.front()         传回第一个数据。

                             c.insert(pos,elem)  在pos位置插入一个elem拷贝

                             c.pop_back()     删除最后一个数据。

                             c.push_back(elem) 在尾部加入一个数据。

                             c.resize(num)     重新设置该容器的大小

                             c.size()         回容器中实际数据的个数。

                             c.begin()           返回指向容器第一个元素的迭代器

                             c.end()             返回指向容器最后一个元素的迭代器


用法

1. 头文件

#include<vector>

2. vector声明及初始化

vector<int> vec;        //声明一个int型向量
vector<int> vec(5);     //声明一个初始大小为5的int向量
vector<int> vec(10, 1); //声明一个初始大小为10且值都是1的向量
vector<int> vec(tmp);   //声明并用tmp向量初始化vec向量
vector<int> tmp(vec.begin(), vec.begin() + 3);  //用向量vec的第0个到第2个值初始化tmp
int arr[5] = {1, 2, 3, 4, 5};   
vector<int> vec(arr, arr + 5);      //将arr数组的元素用于初始化vec向量
//说明:当然不包括arr[4]元素,末尾指针都是指结束元素的下一个元素,
//这个主要是为了和vec.end()指针统一。
vector<int> vec(&arr[1], &arr[4]); //将arr[1]~arr[4]范围内的元素作为vec的初始值

3. vector基本操作

(1). 容量

  • 向量大小: vec.size();
  • 向量最大容量: vec.max_size();
  • 更改向量大小: vec.resize();
  • 向量真实大小: vec.capacity();
  • 向量判空: vec.empty();
  • 减少向量大小到满足元素所占存储空间的大小: vec.shrink_to_fit(); //shrink_to_fit

(2). 修改

  • 多个元素赋值: vec.assign(); //类似于初始化时用数组进行赋值
  • 末尾添加元素: vec.push_back();
  • 末尾删除元素: vec.pop_back();
  • 任意位置插入元素: vec.insert();
  • 任意位置删除元素: vec.erase();
  • 交换两个向量的元素: vec.swap();
  • 清空向量元素: vec.clear();

(3)迭代器

  • 开始指针:vec.begin();
  • 末尾指针:vec.end(); //指向最后一个元素的下一个位置
  • 指向常量的开始指针: vec.cbegin(); //意思就是不能通过这个指针来修改所指的内容,但还是可以通过其他方式修改的,而且指针也是可以移动的。
  • 指向常量的末尾指针: vec.cend();

(4)元素的访问

  • 下标访问: vec[1]; //并不会检查是否越界
  • at方法访问: vec.at(1); //以上两者的区别就是at会检查是否越界,是则抛出out of range异常
  • 访问第一个元素: vec.front();
  • 访问最后一个元素: vec.back();
  • 返回一个指针: int* p = vec.data(); //可行的原因在于vector在内存中就是一个连续存储的数组,所以可以返回一个指针指向这个数组。这是是C++11的特性。

(4)算法

  • 遍历元素
vector<int>::iterator it;
for (it = vec.begin(); it != vec.end(); it++)
    cout << *it << endl;
//或者
for (size_t i = 0; i < vec.size(); i++) {
    cout << vec.at(i) << endl;
}

  • 元素翻转
#include <algorithm>
reverse(vec.begin(), vec.end());

  • 元素排序
#include <algorithm>
sort(vec.begin(), vec.end()); //采用的是从小到大的排序
//如果想从大到小排序,可以采用上面反转函数,也可以采用下面方法:
bool Comp(const int& a, const int& b) {
    return a > b;
}
sort(vec.begin(), vec.end(), Comp);

更多参考链接:






腾讯文档API逆向分析:不用Selenium也能批量导出的黑科技 本文揭秘了如何通过Python逆向分析腾讯文档的隐藏API,实现无需Selenium即可批量导出在线表格的高效方法。详细解析了API调用流程、Cookie维护及异常处理技巧,相比传统方案性能提升显著,适用于大量文档导出的自动化场景。 阅读详情

相关推荐

数据基础设施建设任务中的技术名词解析

近日,国家数据局确定了18个数据基础设施建设任务(先行先试)承担地区,建设任务内容为:数场、数据空间、数据原件、隐私计算、数联网、区块链。这些概念都有什么样的内涵,他们的相互关系是怎样的?

五角大寨 5307

怎样简单的创建一个vector类?(干货 ! ! !详细 ! ! ! ! !)

Vector接口介绍一.Member functions(创建)1.建立空vector2.建立内置类型vector3.建立自定义类型vector4.数组方式建立(赋值)5.迭代器方式建立二.Iterators(迭代器)三.Capacity(内存容量)四.Element access(元素的访问)五.Modifiers(功能实现) 一.Member functions(创建) 1.建立空vector 2.建立内置类型vector 3.建立自定义类型vector 4.数组方式建立(赋值) 5.迭代器方式建立 .

贵在坚持,我相信只要我努力,未来肯定是美好的! 4060

IAR链接器配置文件(.icf)实战指南:从内存映射到代码布局

本文深入解析了IAR链接器配置文件(.icf)的核心作用与实战配置方法。作为嵌入式开发的“内存地图”,.icf文件精确控制代码与数据在Flash和RAM中的布局。文章从定义存储空间、划分区域、预留栈堆,到精确放置中断向量表、代码段及初始化控制,提供了完整的配置指南与避坑技巧,帮助开发者优化内存使用,解决链接错误,是掌握嵌入式系统底层内存管理的关键。

fun88的博客 918

C++ STL----Vector(自己的小整理)

一、简要概述 简单来说vector是一个不定长数组。就是不用给予初始长度,可以不断添加新值。 二、初始化 1)头文件:#include<vector> 2)变量声明: 1.vector<类型名称>变量名 例如vector<int>a即声明一个为int类型的vector 变量名为a 2.vector<int> a(3,1); 定义了3个整型元素的向量,且给出每个元素的初值为1 3.vector<int> a(b); 用b向量来创建a向量,整体复

weixin_44916213的博客 302

FPGA实战笔记——SDRAM乒乓缓存与OV5640视频采集(VGA显示优化篇)

本文详细介绍了基于FPGA的SDRAM乒乓缓存技术在OV5640视频采集与VGA显示优化中的应用。通过设计多时钟域同步和双Bank乒乓缓存策略,有效解决了摄像头30fps输出与VGA 60fps显示之间的帧率不匹配问题,实现了720P高清视频的流畅稳定显示,为实时图像处理系统提供了可靠的硬件解决方案。

ss78901的博客 884

从UART到RS485:手把手教你用SIT3485E收发器搞定工业级通信(含原理图与PCB布局要点)

本文详细解析了从UART到RS485的工业级通信转换,重点介绍了SIT3485E收发器的原理图设计、PCB布局要点及抗干扰技巧。通过差分信号传输和优化电路设计,实现长距离、多设备稳定通信,适用于工业自动化等复杂环境。

weixin_29169505的博客 349

vector<类型> v, vector<类型> v(n),vector<类型> v[n]的区别(浅析)

一,vector<类型> n----创建一个动态数组n,是指没有确定容量,这时候需要使用push_back函数进行输入 二,Vector<类型>标识符(最大容量) 对于vector<int>arr(n),相当于vector<int>arr(n,0),也就是vector<int>arr(n,0),对一个确定容量n的动态数组 arr的所有元素赋值0 。 如果这种情况再使用push_back,则数组不会发生变化,即插入不进去。如图:

m0_59081230的博客 2223

出现Command ‘vim‘ is available in the following places,vim: command not found等解决方法

内置命令无法识别,说明系统变量有误,导致无法识别,既然系统变量有误,将其注释或者更改为正确的即可,但是现在打不开,又怎么注释掉。替换vim来打开编辑,打开之前错误的全局变量文件,发现变量有误,要么注释要么改为。系统变量有全局变量(通过命令行printenv或者echo)和局部变量。对应通过vim修改错误的变量文件,不然source也无法让配置文件生效。本身vim是系统内置的命令,连vim都出现问题。修改为正确的即可,之后还需要重启服务器,使用。之后即可成功,通过即可查看命令是否有写入。...

码农研究僧的博客 5883

STL vector(向量) C++

头文件  #include&lt;vector&gt;定义:vector&lt;变量类型&gt; 变量名;//此处的变量类型可以为任意类型例:vector&lt;变量类型&gt; s;vector类称作向量类,实现了动态数组,用户无需预先开辟数组空间;元素下标同数组相同,不同的是在对其进行操作时,其大小会动态改变。向量的访问方式与数组的访问方式一致,也可以使用下标进行访问,也可以使用其at(num...

梦想之深邃 368

C# Socket通信从入门到精通(14)——多个异步UDP客户端C#代码实现(史上最全)

本文详细介绍了Socket通信中多个异步Udp客户端功能的实现、介绍如何使用多个客户端与多个服务器进行数据的交互,包含连接服务器、断开服务器、发送数据、读取数据、C#代码实现,由高级工程师多年经验总结而成,绝对干货!

qq_34059233的博客 1982

Modbus通信从入门到精通_2_Modbus TCP通信详解及仿真(搭建ModbusTCP仿真环境:创建虚拟PLC并进行ModbusTCP通讯;寄存器与PLC中映射关系;适合理解如何编写上位机)

LocalPort”是PLC的端口,最终的设置如下图所示:(相关的设置都可以查看帮助文档)P#DB1.DBX0.0 BYTE28是以指针形式表示的DB1的DBX0.0开始(在使用的西门子Modbus tcp的程序块中设置的“MB_HOLD_REG”输出寄存器),其有28个字节(28个字节对应14个寄存器),4001是第一个寄存器,往后数14个即可。在上面的基础上,增加一个“DB1”的“组对象”,同时将“MW0”的组对象禁止(双击组对象,“Active”取消勾选),启动之后发现无法连接。

分享学习成长历程,Winter is coming! 1万+

C++ Vector的用法

<br />(1)vector< 类型 > 标识符 ;<br />(2)vector< 类型 > 标识符(最大容量) ;<br />(3)vector< 类型 > 标识符(最大容量,初始所有值);<br />(4) int i[4] = {12,3,4,5};<br />vector< 类型 > vi(i , i+2); //得到i索引值为3以后的值 ; <br />5)vector< vector<int> > //vi 定义2维的容器;记得一定要有空格,不然会报错<br />vector< int > 

深度技术安全 839

152:vue+leaflet 判断一个点是否在一个电子围栏内

本文介绍了一个基于Vue+Leaflet的示例,演示如何判断点是否在电子围栏内。作者大剑师兰特(优快云知名博主)展示了使用polygon.getBounds().contains(latlng)方法检测点与多边形边界的关系。代码仅需80行,通过点击地图触发判断逻辑,结果显示提示信息。该技术可广泛应用于地理围栏、位置服务等场景,需要安装turf依赖。文章提供了完整源码和配置说明,适合GIS开发者学习参考。

大剑师兰特的GIS世界 756

C++ vector 类学习笔记

vector简介       vector是STL中最常见的容器,它是一种顺序容器,支持随机访问。vector是一块连续分配的内存,从数据安排的角度来讲,和数组极其相似,不同的地方就是:数组是静态分配空间,一旦分配了空间的大小,就不可再改变了;而vector是动态分配空间,随着元

whz_zb的专栏 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C++学习笔记之vector类详解

1. 在C++中的详细说明 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。 vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象, 简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。 2. 使用vector, 必须在你的头文件中包含下面的代码:   #include v

xl928471061的博客 590

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C++的学习笔记 vector类与sort类

//计算学生成绩 //版本1: #include #include #include //定义了控制器setprecision,这个控制器允许我们指明输出所包含的有效位数。 #include   //定义了一个类型streamsize,输入/输出库就是用这个类型来表示长度的。 using std::cout; using std::cin; using std::string;

恋叶 1131

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C++学习笔记 :string类和vector动态数组

C++中的string类和Vector动态数组的学习,从构造函数,初始化,常用操作和遍历方式为学习方向

sunqihui1的博客 430

C++ Primer 学习笔记:vector类

使用准备:#include using std::vector; 使用方法推荐:动态增长vector 对象(以及其他标准库容器对象)的重要属性就在于可以在运行时高效地添加元素。因为 vector 增长的效率高,在元素值已知的情况下,最好是先初始化一个空 vector 对象,然后再动态地增加元素。 常用操作:v.empty() v.size() v.push_ba

winjack11的专栏 553
上一篇: VS2010 Visual Assist X破解方法
下一篇: VS2010 解决This function or variable may be unsafe
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值