vector的学习(系统的学习)
首先讲一下vector,vector被称作向量容器,头文件要包括#include<vector>
可以考虑下面定义:
vector<int> x;
vector<char> y;
x和y分别是整形向量,字符型向量,他们都是空向量
下面介绍如何使用vector:
1、vector的初始化:
int n;
cin>>n;
vector<double>d(n),e(n,1.5);
d和e是两个double型向量,长度和容量都为n,但是d的n个元素被默认置为0,而e的n个元素被置为1.5,可以有下列代码验证
#include<iostream> #include<string.h> #include<map> #include<cstdio> #include<cstring> #include<stdio.h> #include<cmath> #include<ctype.h> #include<math.h> #include<algorithm> #include<set> #include<queue> typedef long long ll; using namespace std; const ll mod=1e9+7; const int maxn=1e3+10; const int maxk=5e3+10; const int maxx=1e4+10; const ll maxe=1000+10; #define INF 0x3f3f3f3f3f3f #define Lson l,mid,rt<<1 #define Rson mid+1,r,rt<<1|1 int main() {int n;cin>>n;vector<double>d(n),e(n,1.5);for(int i=0;i<n;i++) cout<<d[i]<<" ";cout<<endl;for(int i=0;i<n;i++) cout<<e[i]<<" ";cout<<endl;return 0; }
2、下面介绍size和push_back,front,capacity,pop_back,back等用法
v.size:返回向量当前长度,也就是元素的个数。
v.push_back:在向量的尾部添加一个元素,当前长度加一,如果空间不够,则将容量扩大为原先容量的2倍
v.front:返回向量第一个元素
v.back:返回向量最后一个元素
v.capacity:返回向量中最多可容纳的元素数目
v.pop_back:删除向量的最后一个元素,并且长度减1
可以由下面代码验证:
#include<iostream> #include<string.h> #include<map> #include<cstdio> #include<cstring> #include<stdio.h> #include<cmath> #include<ctype.h> #include<math.h> #include<algorithm> #include<set> #include<queue> typedef long long ll; using namespace std; const ll mod=1e9+7; const int maxn=1e3+10; const int maxk=5e3+10; const int maxx=1e4+10; const ll maxe=1000+10; #define INF 0x3f3f3f3f3f3f #define Lson l,mid,rt<<1 #define Rson mid+1,r,rt<<1|1 int main() {vector<char>v;int c=97;for(int i=0;i<5;i++) v.push_back(c+i);for(int i=0;i<v.size();i++) cout<<v[i]<<" ";//v.size=5,结果是a b c d ecout<<endl;cout<<v.size()<<" "<<v.capacity()<<endl;//结果是5 8,当前长度是5 可容纳8个元素 v.pop_back();for(int i=0;i<v.size();i++) cout<<v[i]<<" ";//输出结果为a b c d ,因为已经删除最后一个元素了cout<<endl;cout<<v.front()<<" "<<v.back()<<endl;//结果是a d,第一个元素和最后一个元素cout<<v.size()<<" "<<v.capacity()<<endl;//结果是4 8,长度减1,但是容量不变return 0; }
3、下面讲一下向量迭代器:iterator
STL提供成为迭代器的对象,他能够指向一个元素,存取那个元素的值,并能按一种与任何特定容器无关的方法(即一种通用机制)从容器中的一个元素移动到
另一个元素
向量的迭代器可以是指向元素的指针p,通过p引用vector中的元,也可以被实现指向向量起点的指针p加上一个位置值index
为了初始化一个向量迭代器,每个STL容器至少提供两个成员函数:begin(),end()。
begin():返回迭代器的值,该值是容器第一个元素的位置
end:返回迭代器的值,该值是容器最后一个元素的下一个的位置
迭代器的基本操作符:
++:将迭代器从当前位置移动到下一个元素的位置,可用前缀操作符,也可做后缀操作符
--:将迭代器从当前位置移动到前一个元素的位置,可用前缀操作符,也可做后缀操作符
*:存取迭代器所指的元素
=:两个相同类型的迭代器it1,it2,执行it1=it2,使得it1也指向it2的位置
==:两个类型相同的迭代器it1,it2,若他们指向同一个元素,则it1==it2返回true
!=:两个类型相同的迭代器it1,it2,若他们指向不同元素,则it1!=it2返回true
+,-,+=,-=:
[]:对迭代器it及整数n,it[n]返回从it的当前位置向前或向后n个元素的引用
下面的代码可以验证:
#include<iostream> #include<string.h> #include<map> #include<cstdio> #include<cstring> #include<stdio.h> #include<cmath> #include<ctype.h> #include<math.h> #include<algorithm> #include<set> #include<queue> typedef long long ll; using namespace std; const ll mod=1e9+7; const int maxn=1e3+10; const int maxk=5e3+10; const int maxx=1e4+10; const ll maxe=1000+10; #define INF 0x3f3f3f3f3f3f #define Lson l,mid,rt<<1 #define Rson mid+1,r,rt<<1|1 int main() {vector<char>v;int c=97;for(int i=0;i<5;i++) v.push_back(c+i);vector<char>::iterator it1=v.begin(),it2=v.end();//申请两个迭代器,并初始化它们for(it1;it1!=it2;it1++) cout<<*it1<<" ";//结果是a b c d ecout<<endl;it1=v.begin();it1+=4;it2-=4;cout<<*it1<<" "<<*it2<<endl;//结果是e bit1++;it2--;cout<<*it1<<" "<<*it2<<endl;//结果是 acout<<it2[1]<<" "<<it2[-1]<<endl;//结果是 b 输出后面的一个元素,前面的一个元素return 0; }
4、下面是向量的插入和删除操作:
成员函数 push_back、pop_back、back都是在向量尾部进行操作的函数,一般情况下是在向量任何位置进行插入和删除操作,vector完成这些操作的函数有:
v.insert(it,a):在it指定元素前插入a
v.insert(it,n,a):在it指定位置前插入n个a
v.erase(it):删除it指定的位置,返回指定元素的下一个元素的迭代器
v.erase(it1,it2):删除it1~it2-1之间的所有元素,返回最后一个被删除元素的下一个元素的迭代器
v.clear():删除所i有元素
v.reserve(n):向量的容量为n,可以防止在插入和删除的时候向量容量经常发生改变
v.reverse(it,it+n) :反转it~it+n-1的所有元素
下面代码可以验证:
#include<iostream> #include<string.h> #include<map> #include<cstdio> #include<cstring> #include<stdio.h> #include<cmath> #include<ctype.h> #include<math.h> #include<algorithm> #include<set> #include<queue> typedef long long ll; using namespace std; const ll mod=1e9+7; const int maxn=1e3+10; const int maxk=5e3+10; const int maxx=1e4+10; const ll maxe=1000+10; #define INF 0x3f3f3f3f3f3f #define Lson l,mid,rt<<1 #define Rson mid+1,r,rt<<1|1 int main() {vector<int>v;for(int i=0;i<5;i++) v.push_back(i);vector<int>::iterator it;for(it=v.begin();it!=v.end();it++) cout<<*it<<" ";//输出结果是0 1 2 3 4cout<<endl;it=v.begin();v.insert(it+2,5);//输出结果是0 1 5 2 3 4,因为it指向第一个元素,it+2则指向第三个元素,在第三个元素之前插入5for(it=v.begin();it!=v.end();it++) cout<<*it<<" ";cout<<endl;it=v.begin();v.insert(it,3,6);//书上说插入元素之后要重新给it赋值,因为向量空间改变了,,具体按着书上来,每次插入之后都给it重新赋值for(it=v.begin();it!=v.end();it++) cout<<*it<<" ";//输出结果为6 6 6 0 1 5 2 3 4,在it指定元素之前插入3个6cout<<endl;it=v.begin();v.erase(it);for(it=v.begin();it!=v.end();it++) cout<<*it<<" ";//输出结果为6 6 0 1 5 2 3 4,删除了第一个元素cout<<endl;//vector<int>::it1;it=v.begin();v.erase(it,it+3);for(it=v.begin();it!=v.end();it++) cout<<*it<<" ";//输出结果为1 5 2 3 4 删除了前三个元素cout<<endl;v.clear();it=v.begin();for(it=v.begin();it!=v.end();it++) cout<<*it<<" ";//没有输出结果,因为已经清空了return 0; }
5、二维向量
如果一个向量的每一个元素是一个向量,则称为二维向量:例如
vector<vector<int> >vv(3,vector<int>(4)); 将构造一个二维向量vv,它含有3个元素,每个元素又是含有4个int型元素的向量,编译器两次调用构造函数构造对象vv,第一次调用构造函数构造一个无名的含四个0的vector<int>对象,第二次调用构造函数,以这个无名向量为初值初始化它的三个元素。 一般的vv[r][c]访问第r行第c列的值,表达式vv,size()的值是3,vv[1].size()的值是4,也可以产生长度不一样的向量,具体看代码
#include<iostream> #include<string.h> #include<map> #include<cstdio> #include<cstring> #include<stdio.h> #include<cmath> #include<ctype.h> #include<math.h> #include<algorithm> #include<set> #include<queue> typedef long long ll; using namespace std; const ll mod=1e9+7; const int maxn=1e5+10; const int maxk=3e5+10; const int maxx=1e4+10; const ll maxe=1000+10; #define INF 0x3f3f3f3f3f3f #define Lson l,mid,rt<<1 #define Rson mid+1,r,rt<<1|1 int main() {vector<vector<int> >vv;for(int i=1;i<=3;i++)vv.push_back(vector<int>(i,0));//每一行长度为i,初值为0for(int i=0;i<3;i++){for(int j=0;j<vv[i].size();j++){cout<<vv[i][j]<<" ";}cout<<endl;}return 0; }
下面是vector的sort函数的用法
#include<iostream> #include<string> #include<algorithm> #include<cstring> #include<vector> using namespace std; const int maxn=1000+50; int main() {vector<int>a;a.push_back(1);a.push_back(5);a.push_back(3);sort(a.begin(),a.end());for(int i=0;i<3;i++) cout<<a[i]<<endl;return 0; }
转载于:https://www.cnblogs.com/caijiaming/p/9454208.html
vector的学习(系统的学习)相关推荐
- 深度学习系统 深度学习软件
深度学习是近几年的热门研究话题,它的概念源于人工神经网络的研究.它是机器学习研究中的一个新的领域,其动机在于建立.模拟人脑进行分析学习的神经网络,模仿人脑的机制来解释数据,例如图像,声音和文本. 什么 ...
- 矩阵快速幂的学习(系统的学习)
学习博客:https://www.cnblogs.com/cmmdc/p/6936196.html https://www.cnblogs.com/yan-boy/archive/2012/11/29 ...
- 015基于Spring+SpringMVC的英语学习系统/教研学习平台
开发环境: Eclipse/MyEclipse.Tomcat8.Jdk1.8 数据库: MySQL 技术: Spring+Spring mvc+Mysql+Jsp+Jstl+JDBC 适用于: 课程设 ...
- set学习(系统的学习)
set是STL中一种标准关联容器.它底层使用平衡的搜索树--红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高.set,顾名思义是"集合" ...
- 计算机英语应用研究,计算机英语辅助学习系统的研究与应用-软件工程专业论文.docx...
湖南大学 硕士学位论文 计算机英语辅助学习系统的研究与应用 姓名:许邓艳 申请学位级别:硕士 专业:软件工程 指导教师:范年柏:罗亚希计算机英语辅助学习系统的研究与应用摘 计算机英语辅助学习系统的研究 ...
- c语言的学生理系统,C语言学习系统的教程
完美者(wmzhe.com)网站以软件下载为基础,改版后的网站对功能性板块进行扩充,以期能够解决用户在软件使用过程中遇见的所有问题.网站新增了"软件百科"."锦囊妙技&q ...
- c语言基础知识孙小红,基于J2EE的C语言在线学习系统的设计与实现
摘要: C语言对于当前独立学院的学生来讲,是一门比较难的公共课程,并且在教学过程中,老师很难指导学生的课后学习.本文以华南农业大学珠江学院的C语言课程教学情况为背景,运用B/S模式设计C语言在线学习系 ...
- 计算机游戏比赛,计算机学习系统问世 机器会学习游戏比赛
腾讯科技讯(过客/编译)一位计算机科学家已经发表了一篇论文详细描述了计算机系统在观看了两分钟长的人类桌游比赛的视频之后如何成功赢得比赛. 计算机科学家研制最新计算机学习系统能学习如何成功赢得游戏比赛 ...
- 深度学习系统框架的演进趋势
如果我们回看整个智能汽车系统架构的演进过程,汽车的电子电气架构经历了"直联","总线","域控"三个阶段,从离散走向集中,构筑了硬件架构变化 ...
- 问答学习系统 - 针式PKM V8.20新增功能
目录 1.什么是问答学习系统? 2.针式PKM为什么要引入"问答学习系统" 3.建立问答 4.如何利用问答学习系统进行学习? 1.什么是问答学习系统? 将所有的材料组织成一系列的问 ...
最新文章
- 砂.随笔.三十四.用时间在等待
- RPM包搜索下载网站
- 2020-12-09 深度学习 卷积核/过滤器、特征图(featue map)、卷积层
- JAVA教程 第六讲 Java的线程和Java Applet(二)
- Web 仿 App 动画竟然引出了“性能杀手”
- 【已解决】Exception in thread “Thread-0“ redis.clients.jedis.exceptions.JedisConnectionException: java.n
- linux 卸载 usbmouse,8 Linux usbmouse设备驱动程序
- Mybatis的直接执行SQL
- AE中Identify查询工具的实现
- Forge Viewer 的协作审查如何使用
- java8 stream中 forEach和 forEachOrdered 当parallel时候执行过程安全问题深入理解
- c# 免费版pdf转word尝试
- Google Code 开源项目
- matlab gui 简介,Matlab中Powergui的介绍.pdf
- 航拍VR全景怎么拍摄制作?航拍VR全景制作软件有哪些?
- 2018北大数学夏令营游记
- 投稿动态无法删除的情况下,如何批量删除B站动态?
- Alpha 冲刺(8/10)
- html中文字不自动换行 white-space style
- 计算机手动配置信息,手动修改并设置电脑开机画面入您所愿
热门文章
- 如何将 byte[] 转换为 IntPtr?
- ubuntu 12.04 ubuntu System program problem detected 解决方法
- [Asp.net MVC]HandleErrorAttribute异常过滤器
- 圆满收官!我的2022 秋招总结与建议
- 200+页综述!阐述大规模预训练模型机遇与风险
- 知识图谱上的双塔召回:阿里的IntentGC模型
- php sql慢查询,一个用户SQL慢查询分析,原因及优化_MySQL
- python 中主线程结束 子线程还在运行么_「干货」python线程笔记
- html 选择自动增加行数,HTML怎么自动计算出上两行的值在第三行里面?
- mysql 全文检索 教程_mysql怎么做全文检索