C++语法:vector的使用

      • 【1】vector的创建与元素插入
      • 【2】vector元素的访问
      • 【3】vector的基本使用技巧
      • 【4】vector的几个重要操作

【1】vector的创建与元素插入

std::vector<cv::Point> points;
//vector容器中保存的类型是Point
for (int i = 0;i < 10;i++)
{float x = rng.uniform(0, img.cols);float y = rng.uniform(0, img.rows);//每随机生成一个Point就把它存入vector中points.push_back(cv::Point(x, y));//显示circle(img, points[i], 2, Scalar(0, 0, 255), FILLED, LINE_AA);
}

注意点:
1、错误的赋值方式

std::vector<cv::Point> points;
points[0] = Point(2, 1);
cout << "points[0]" << endl;

因为 points 还没有第一个元素,我们只能索引 vector 中已经存在的元素
2、错误的插入方式
当我们用一个给定的大小定义一个vector 时,任何push_back操作都会增加元素数目。是在原有元素的末尾进行插入操作的!
(先定义了一个大小为10的vector,然后进行10次push_back操作,元素数目变为10+10)

	Mat img(500, 500, CV_8UC3, Scalar(0, 0, 0));std::vector<cv::Point> points(10);//随机初始化10个点for (int i = 0;i < 10;i++){float x = rng.uniform(0, img.cols);float y = rng.uniform(0, img.rows);points.push_back(cv::Point(x, y));//显示circle(img, points[i], 2, Scalar(0, 0, 255), FILLED, LINE_AA);}//【访问元素】//1、下标访问cout << "下标访问"<< endl;for (int i = 0;i < points.size();i++){cout << points[i] << endl;}

【2】vector元素的访问

分为两种:
1、下标访问

//1、下标访问
cout << "下标访问"<< endl;
for (int i = 0;i < points.size();i++)
{cout << points[i] << endl;
}

2、迭代器访问

//2、使用vector 操作集中的begin()和 end()所返回的迭代器 iterator 
cout << "迭代器访问" << endl;
for (vector<Point>::iterator it = points.begin();it != points.end(); ++it)
{cout << *it << endl;
}

两种访问方式得到的结果是一样的

【3】vector的基本使用技巧

1、使用 if ( vector.empty() ) 判断是否是空,vector.size()判断元素个数。

int main()
{std::vector<cv::Point> points;if (points.empty()){cout << "points is empty" << endl;}cout << "size " << points.size() << endl;return 0;
}

空vector
2、vector的元素被初始化为与其类型相关的缺省值:算术和指针类型的缺省值是 0,对于class 类型,缺省值可通过调用这类的缺省构造函数获得,我们还可以为每个元素提供一个显式的初始值来完成初始化

int main()
{std::vector<cv::Point> points(10,Point(10,10));if (points.empty()){cout << "points is empty" << endl;}cout << "size " << points.size() << endl;//使用vector 操作集中的begin()和 end()所返回的迭代器 iterator cout << "迭代器访问" << endl;for (vector<Point>::iterator it = points.begin();it != points.end(); ++it){cout << *it << endl;}return 0;
}

在这里插入图片描述
3、vector元素的部分拷贝
points1拷贝数组中的前五个元素
points1拷贝数组中的第3个到第6个之间的(3、4、5)被传递给vector 的两个指针标记了用来初始化对象的值的范围,第二个指针总是指向要拷贝的末元素的下一位置

int main()
{Point a[5] = { Point(0,0), Point(1,1),Point(2,2),Point(3,3),Point(4,4)};std::vector<cv::Point> points1(a, a + 5);std::vector<cv::Point> points2(&a[2], &a[5]);for (vector<Point>::iterator it = points1.begin();it != points1.end(); ++it){cout << *it << endl;}cout << endl;for (vector<Point>::iterator it = points2.begin();it != points2.end(); ++it){cout << *it << endl;}return 0;
}

在这里插入图片描述
4、vector 可以被另一个 vector 初始化或被赋给另一个 vector

int main()
{std::vector<cv::Point> points1(2);// 用另一个 vector 初始化一个 vector vector<Point> points2(points1);// 把一个 vector 拷贝给另一个 vector vector<Point> points3;points3 = points1;for (vector<Point>::iterator it = points1.begin();it != points1.end(); ++it){cout << *it << endl;}cout << endl;for (vector<Point>::iterator it = points2.begin();it != points2.end(); ++it){cout << *it << endl;}cout << endl;for (vector<Point>::iterator it = points3.begin();it != points3.end(); ++it){cout << *it << endl;}return 0;
}

在这里插入图片描述

【4】vector的几个重要操作

(1)a.assign(b.begin(), b.begin()+3);//b为向量,将b的0~2个元素构成的向量赋给a
(2)a.assign(4,2);//是a只含4个元素,且每个元素为2
(3)a.back();//返回a的最后一个元素
(4)a.front();//返回a的第一个元素
(5)a[i]; //返回a的第i个元素,当且仅当a[i]存在
(6)a.clear();//清空a中的元素
(7)a.empty();//判断a是否为空,空则返回ture,不空则返回false
(8)a.pop_back();//删除a向量的最后一个元素
(9)a.erase(a.begin()+1,a.begin()+3);//删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)
(10)a.push_back(5);//在a的最后一个向量后插入一个元素,其值为5
(11)a.insert(a.begin()+1,5);//在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4
(12)a.insert(a.begin()+1,3,5);//在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5
(13)a.insert(a.begin()+1,b+3,b+6);//b为数组,在a的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元素(不包括b+6),如b为1,2,3,4,5,9,8,插入元素后为1,4,5,9,2,3,4,5,9,8
(14)a.size();//返回a中元素的个数;
(15)a.capacity();//返回a在内存中总共可以容纳的元素个数
(16)a.resize(10);//将a的现有元素个数调至10个,多则删,少则补,其值随机
(17)a.resize(10,2);//将a的现有元素个数调至10个,多则删,少则补,其值为2
(18)a.reserve(100);//将a的容量(capacity)扩充至100,也就是说现在测试a.capacity();的时候返回值是100.这种操作只有在需要给a添加大量数据的时候才 显得有意义,因为这将避免内存多次容量扩充操作(当a的容量不足时电脑会自动扩容,当然这必然降低性能)
(19)a.swap(b);//b为向量,将a中的元素和b中的元素进行整体性交换
(20)a==b; //b为向量,向量的比较操作还有!=,>=,<=,>,<
(21)判断某元素是否在vector中:
c vector<int>::iterator result = find( L.begin( ), L.end( ), 3 ); //查找3 if ( result == L.end( ) ) //没找到 cout << "No" << endl; else //找到 cout << "Yes" << endl;

Reference:
https://www.cnblogs.com/forever-fireflies/p/10567405.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++语法:求vector中的最大值及其位置

代码&#xff1a; #include <iostream> #include <vector> #include <algorithm> using namespace std;int main(){vector<int> a { 2,4,6,7,1,0,8,9,6,3,2 };auto maxPosition max_element(a.begin(), a.end());cout << *maxPosition <&l…

C#编码简单性之函数篇(如何编写简短的C#代码,随时更新)

作者&#xff1a;陈勇出处&#xff1a;blog.csdn.net/cheny_com这是编码简单性系列中的其中一篇&#xff0c;之前几篇包括代码篇和语义篇。因为要积累案例&#xff0c;会随时更新。之前提到&#xff1a;编码简单性的“心法”就是&#xff1a;只要屏幕上有任何两部分代码看上去相…

R学习笔记(1):R是什么

本文最新版已更新至http://thinkinside.tk/2013/05/03/r_notes_1_what.html 在学习量化投资的时候&#xff0c;我发现了R&#xff08;www.r-project.org&#xff09;。R到底是什么呢&#xff1f;在开始之前&#xff0c;先看看R的神奇之处。 1. R初窥 从CRAN&#xff08;The Co…

数字图像处理知识总结

一&#xff1a;基本概念 数字图像&#xff1a;指由被称作像素的小块区域组成的二维矩阵。将物理图像行列划分后&#xff0c;每个小块区域称为像素&#xff08;pixel&#xff09;。每个像素包括两个属性&#xff1a;位置和灰度。图像数字化一般分为采样、量化与编码三个步骤。数…

oracle marley,滚石杂志500大专辑,对欧美音乐感兴趣的可以找来听听。

滚石杂志于2003年11月评选出的滚石杂志五百大专辑。值得一提的是&#xff0c;披头士乐队占据了前五中的三席&#xff0c;前五十中的7席&#xff0c;正式出版的专辑几乎全部入选前五百。排名 演唱者 专辑001 披头士乐队(The Beatles) Sgt. Peppers Lonely Hearts Club Band002 海…

kinect中psi是什么_PSI的完整形式是什么?

kinect中psi是什么PSI&#xff1a;每平方英寸磅/国际人口服务 (PSI: Pound per Square Inch / Population Services International) 1)PSI&#xff1a;每平方英寸磅 (1) PSI: Pound per Square Inch) PSI is an abbreviation of Pound per Square Inch. Pound per Square Inch …

jupyter notebook指定工作目录

【1】打开Anaconda Navigator 打开Anaconda Navigator&#xff0c;点击左侧Environments&#xff0c;点击base(root)->open Terminal 【2】输入指令jupyter notebook --generate-config 按下回车键&#xff0c;弹出config所在位置。 以VS Code打开文件 【3】修改第26…

五、“嵌段共聚醚酯型”易去污整理剂的结构特点及对织物服用性的影响?

“嵌段共聚醚酯型”易去污整理剂的结构特点及对织物服用性的影响? 收集资料阶段 嵌段共聚醚酯型易去污整理剂(简称聚醚酯)是涤纶最早的一种耐久性易去污剂,其商品名称为Permalose T,由英国ICI公司生产,它能使涤纶及其混纺织物具有优良的易去污、抗湿再沾污和抗静电性能。…

linux服务器指示灯,【转】明明白白你的Linux服务器——故障篇 | 旺旺知识库

在Linux/unix服务器的维护过程中&#xff0c;遇到各种各样的问题&#xff1b;有的严重&#xff0c;有的很好解决&#xff0c;有的解决过程我就记录下来与大家分享下&#xff0c;希望能给大家带来帮助。故障一、今天早上来的第一件事&#xff0c;就是检查昨天晚上刚刚重新安装的…

构件图(Component Diagram)—UML图(八)

构件图是显示代码自身结构的实现级别的图表。构件图由诸如源代码文件、二进制代码文件、可执行文件或动态链接库 (DLL) 这样的构件构成&#xff0c;并通过依赖关系相连接 下面这张图介绍了构件图的基本内容&#xff1a; 下面这张图是个构件图的实例&#xff1a; 转载于:https:/…

GAE work

https://appengine.google.com/ can visit in Home, but cannot visit in Office.Download a java SDK for GAE, will write something here.转载于:https://www.cnblogs.com/cnyao/archive/2011/05/05/2038161.html

二进制文件签名_二进制数的签名表示

二进制文件签名Prerequisite: Number systems 先决条件&#xff1a; 数字系统 Until now, we have only talked about positive numbers and have already discussed their mathematical operations. But there also exists negative numbers in the number system, in this a…

六、解释红外线纺织品的保健、保暖作用?

解释红外线纺织品的保健、保暖作用&#xff1f; 收集资料阶段 人体既是远红外的辐射源又能吸收远红外辐射。由于人体60&#xff05;&#xff5e;70&#xff05;为水‚故人体对红外辐射吸收近似于水&#xff0c;人体组织所拥有的特定振动频率和回转周波数与人体组织中的O&…

linux yum命令作用,YUM命令使用示例

YUM或Yellowdog Updater Modified是管理rpm包的前端工具。 它用于通过命令行界面或使用图形模式来安装&#xff0c;删除&#xff0c;更新和收集有关rpm软件包的信息。 使用YUM的主要优点是&#xff0c;它解决了rpm包的所有依赖关系&#xff0c;并将它们与包一起安装。下面让我们…

PySide开发MySql远程备份工具

MySql数据库安装在机房&#xff0c;而工作人员日常办公的地方距离机房有段距离&#xff0c;且不在同一楼层。出入机房不是很方便。就想着能否给这些人员开发一个图形化的备份MySql数据库的小工具&#xff1f;使用组件如下&#xff1a;(1)Python(2)PySide(3)mysqldump其实mysql已…

HadoopSourceAnalyse --- Nodemanager Container request handler

Overview Container 是Hadoop中运行任务的地方&#xff0c;当Resourcemanager收到一任务请求后&#xff0c;会向nodemanager 请求一个Container 来运行ApplicationMaster&#xff0c; ApplicationMaster运行起来之后&#xff0c;会继续向Resourcemanager请求新的container来运行…

数据结构 二叉树的存储结构_线程二叉树| 数据结构

数据结构 二叉树的存储结构线程二叉树 (Threaded Binary Tree ) A binary tree can be represented by using array representation or linked list representation. When a binary tree is represented using linked list representation. If any node is not having a child …

八、关于防水透湿整理

1,防水透湿整理加工技术的类型? 收集资料阶段 按照加工方式分类 防水透湿织物按照加工方式可分为高密织物、涂层织物和层压织物。不同加工方式所对应的织物各有特色。高密织物产生于 20 世纪 80 年代,它的密度可达到普通织物的 20 倍。在晴朗天气时,纱线孔隙大约为 10 μm…

求质数算法的N种境界 (N 10) zz

★引子 前天&#xff0c;俺在《俺的招聘经验[4]&#xff1a;通过笔试答题能看出啥&#xff1f;》一文&#xff0c;以"求质数"作为例子&#xff0c;介绍了一些考察应聘者的经验。由于本文没有政治敏感内容&#xff0c;顺便就转贴到俺在CSDN的镜像博客。   昨天&…

Python匿名函数---排序

一、列表的排序 nums [1,2,3,5,4,7,87,4,9,56,44,7,5] nums.sort()#默认从小到大排序 nums#结果为&#xff1a;[1, 2, 3, 4, 4, 5, 5, 7, 7, 9, 44, 56, 87]nums [1,2,3,5,4,7,87,4,9,56,44,7,5] nums.sort(reverseTrue)#从大到小排序 nums#结果为&#xff1a;[87, 56, 44, …