vector函数用法
一维
基本用法:
(1)头文件#include <vector>
(2)创建vector对象,vector<int> vec;
(3)尾部插入数字:vec.push_back(a);
(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。
(5)使用迭代器访问元素.
vector<int>::iterator it;for(it=vec.begin();it!=vec.end();it++)cout<<*it<<endl;
(6)插入元素: vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
(7)删除元素: vec.erase(vec.begin()+2);删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
(8)向量大小:vec.size();
(9)清空:vec.clear();
(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]存在2013-12-07
(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为向量,向量的比较操作还有!=,>=,<=,>,<
vector 的初始化:可以有五种方式,举例说明如下:
(1) vector<int> a(10);
//定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。
(2)vector<int> a(10,1);
//定义了10个整型元素的向量,且给出每个元素的初值为1
(3)vector<int> a(b);
//用b向量来创建a向量,整体复制性赋值
(4)vector<int> a(b.begin(),b.begin+3);
//定义了a值为b中第0个到第2个(共3个)元素
(5)从数组中获得初值
int b[7]={1,2,3,4,5,9,8};vector<int> a(b,b+7);
注意:
vector<int> a;
for(int i=0;i<10;i++)a[i]=i;
//这种做法以及类似的做法都是错误的,下标只能用于获取已存在的元素,而现在的a[i]还是空的对象。
vector的元素不仅仅可以是int,double,string,还可以是结构体,但是要注意:结构体要定义为全局的。
Vector作为函数的参数或者返回值时,需要注意它的写法:
int Distance(vector&a, vector&b) 其中的“&”绝对不能少!
头文件#include<algorithm>
a.begin()(包括它)到a.end()(不包括它)
(1)reverse(vec.begin(),vec.end());
将元素翻转,即逆序排列!
(在vector中,如果一个函数中需要两个迭代器,一般后一个都不包含)
(2)reverse(a.begin(),a.end());
//元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1
(3)copy(a.begin(),a.end(),b.begin()+1);
//把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素
(4)find(a.begin(),a.end(),10);
//在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置
(5)sort(vec.begin(),vec.end());
(默认是按升序排列,即从小到大).
可以通过重写排序比较函数按照降序比较,如下:
定义排序比较函数:
降序排序:
bool cmp(const int &a,const int &b)
{return a>b;
}
sort(vec.begin(),vec.end(),cmp);
输出Vector的中的元素 :
vector<float> vecClass;
int nSize = vecClass.size();
方法一:
for(int i=0;i<nSize;i++)
{ cout<<vecClass[i]<<" ";
} cout<<endl;
需要注意的是:以方法一进行输出时,数组的下表必须保证是整数。
方法二:
for(int i=0;i<nSize;i++)
{ cout<<vecClass.at(i)<<" ";
} cout<<endl;
方法三:输出某一指定的数值时不方便
for(vector<float>::iterator it = vecClass.begin();it!=vecClass.end();it++)
{ cout<<*it<<" ";
} cout<<endl;
二维
//得到一个5行3列的数组
//由vector实现的二维数组,可以通过resize()的形式改变行、列值
int i,j;
vector<vector<int>> array(5);
for (i = 0; i < array.size(); i++)array[i].resize(3);for(i = 0; i < array.size(); i++)
{for (j = 0; j < array[i].size();j++){array[i][j] = (i+1)*(j+1);}
}
打印输出:
void reverse_with_iterator(vector<vector<int>> vec)
{vector<int>::iterator it;vector<vector<int>>::iterator iter;vector<int> vec_tmp;for(iter = vec.begin(); iter != vec.end(); iter++){vec_tmp = *iter;for(it = vec_tmp.begin(); it != vec_tmp.end(); it++)cout << *it << " ";cout << endl;}
}void reverse_with_index(vector<vector<int>> vec)
{int i,j;for (i = 0; i < vec.size(); i++){for(j = 0; j < vec[0].size(); j++)cout << vec[i][j] << " ";cout << endl;}
}
vector函数用法相关推荐
- undistortPoints()函数用法总结
undistortPoints()函数用法总结 函数调用:C++: void undistortPoints(InputArray src, OutputArray dst, InputArray ...
- 求介绍matlab函数用法的书,MATLAB初学者教程--函数用法的简单介绍
1.4 函数用法的简单介绍 1.4.1什么是函数 似乎很多人一听到函数这个词就会想到数学中的某个概念,然后对于恐惧数学的同学就开始打退堂鼓.在matlab当中到处可以用到函数,它的出现可以让我们用很简 ...
- c++中vector的用法详解
c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...
- vector 清空 Linux,STL容器vector基础用法小结
STL容器vector基础用法小结根据<ACM程序设计>写的,用实例展示vector用法. 方法:push_back(), insert(), erase(), clear(), size ...
- C++ list 函数用法整理
list 是顺序容器的一种. 底层 是一个双向链表.使用 list 需要包含头文件 list.双向链表的每个元素中都有一个指针指向后一个元素,也有一个指针指向前一个元素. list的初始化: list ...
- C++ search()函数用法详解(深入了解,一文学会)
find_end() 函数用于在序列 A 中查找序列 B 最后一次出现的位置.那么,如果想知道序列 B 在序列 A 中第一次出现的位置,该如何实现呢?可以借助 search() 函数. search( ...
- C++ sort排序函数用法
最近在刷ACM经常用到排序,以前老是写冒泡,可把冒泡带到OJ里后发现经常超时,所以本想用快排,可是很多学长推荐用sort函数,因为自己写的快排写不好真的没有sort快,所以毅然决然选择sort函数 用 ...
- C++ reverse()函数用法详解(深入了解,一文学会)
reverse_copy() 算法可以将源序列复制到目的序列中,目的序列中的元素是逆序的.定义源序列的前两个迭代器参数必须是双向迭代器.目的序列由第三个参数指定,它是目的序列的开始迭代器,也是一个输出 ...
- C sort 排序函数用法
最近在刷ACM经常用到排序,以前老是写冒泡,可把冒泡带到OJ里后发现经常超时,所以本想用快排,可是很多学长推荐用sort函数,因为自己写的快排写不好真的没有sort快,所以毅然决然选择sort函数 用 ...
- matlab stem函数坐标轴_MATLAB中stem函数用法
stem(Y) 将数据序列Y从x轴到数据值按照茎状形式画出,以圆圈终止.如果Y是一个矩阵,则将其每一列按照分隔方式画出. stem(X,Y)在X的指定点处画出数据序列Y. stem(...,'fil ...
最新文章
- Windows下Qt程序打包
- K12,再好的愿景遇到商业都会慢慢失去真正的目标
- Jsoup介绍||​​​​​​​jsoup解析url || Jsoup解析字符串||​​​​​​​Jsoup解析文件
- C/C++之类的前置声明
- 链表之判断一个链表是否为回文结构(二)
- 【Linux学习篇】This virtual machine is configured for 64-bit guest operating systems.……
- python 清华镜像_Anaconda3清华镜像 V5.3.1 最新免费版
- 【学习】03 淘宝爬虫-使用selenium采集关键词为电动车的数据
- Xtreme Report为windows开发者提供一个完善的类似于Outlook 2003报表的风格
- python26章_[Python设计模式] 第26章 千人千面,内在共享——享元模式
- 使用花生壳做内网穿透
- 安卓微信本地数据库解密与删除聊天记录恢复 EnMicroMsg.db FTS5IndexMicroMsg_encrypt.db
- C语言中IO模型实现并发服务器
- 计算机位置不可用d 桌面,win7系统D: 文档desktop引用了一个不可用的位置怎么办...
- 在移动硬盘中,安装CentOS 7双系统
- 怎么做极简ui设计?UI界面设计中的极简原则【萧蕊冰】
- 基于STM32物联网WiFi智能家居控制系统设计(原理图+源代码+系统资料)
- 多普勒效应 和 其的应用(测速仪、彩超、宇宙大爆炸 - 红移)
- android微信分享怎么自定义样式,自定义微信分享样式教程
- python读取文件需要的异常处理_Python基础:文件的简单读取和操作以及异常处理...
热门文章
- 【实习周报】2019年6月 前端开发实习工作周报汇总
- MySQL 导入数据 时间数据 不准确 解决办法
- C如何简单的读写文件?二进制文件如何读写?如何移动文件指针?
- 一、Scrapy爬虫概述
- 证券交易2-券商柜台系统
- 遥感图像处理之计算植被覆盖度公式
- 组策略锁定计算机时间,Win7电脑怎么禁止修改系统时间?两种禁止方法全教给你!...
- 计算机时间无法更改,电脑时间不能修改|系统时间改不了 四个解决方法
- 浙江学生头戴“金箍”,上课走神自动通知家长
- 关于wkhtmltopdf生成pdf空白