C++ 中vector的学习
根据各种做题,发现数组并不是很适用于各种情况,当涉及到内存占用的时候,数组可能就没有vector的优势了,而vector,动态数组,比较适合某些情况。
接下来看看比较基本的vector用法:
1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 5 int main() 6 { 7 int i; 8 int A[10]={9,5,8,6,4,2,3,7,0,1}; 9 vector<int> V; 10 11 for(i=0;i<10;i++) 12 { 13 V.push_back(A[i]); 14 } 15 16 vector<int>::iterator it; 17 for(it=V.begin();it!=V.end();it++) 18 { 19 cout<<*it<<endl; 20 } 21 22 return 0; 23 }
这里还用了一个迭代器访问元素。
注意点:
1,引用头文件:#include<vector>
2,创建vector 对象 : vector<int> V;
3,尾插元素: V.push_back(a[i]);
4,插入元素: V.insert(V.begin()+i,a); //在第i+1个元素前面插入a
5,删除元素:vec.erase(vec.begin()+i); //删除第i+1个元素
6,求vector的长度:V.size();
1 #include<iostream> 2 #include<vector> 3 #include<algorithm> 4 using namespace std; 5 6 int main() 7 { 8 int i; 9 int A[10]={9,5,8,6,4,2,3,7,0,1}; 10 vector<int> V; 11 12 for(i=0;i<10;i++) 13 { 14 V.push_back(A[i]); 15 } 16 17 sort(V.begin(),V.end());//排序方法 18 19 vector<int>::iterator it; 20 for(it=V.begin();it!=V.end();it++) 21 { 22 cout<<*it<<" "; 23 } 24 25 return 0; 26 }
在这个基础上,加上 头文件#include<algorithm> 中的sort() 方法,就可以得出排序好了的
这种是升序的,降序的话,sort(vec.begin(),vec.end(),Comp),这样就降序排序。
百度的Comp:
bool Comp(const int &a,const int &b) {return a>b; }
主要是以前虽然学过vector,但并没有真正去理解它,以后遇到一些数组处理不过来的问题,会尝试着利用vector的。
在PAT中,也有这种题目,我自己编译的话,主要的问题就是段问题,超哥说问题在于我的数组,之前曾写过各种排序算法的性能分析,当时由于想要看到时间,所以定义了一个二维数组,都很大int A[100][1000],记得只能写成这个样子,不然就不能运行了。所以,同理,可能这就是动态数组的好处,只是当时不能熟练地去利用vector这个容器。
下面来看PAT中的题目:
链接:https://www.patest.cn/contests/pat-b-practise/1015
这个题目要求的范围也比较大,动态数组用起来就很方便了。
因为我用的是数组,然后逻辑,就是比较排序出了一点点问题,然后就百度了看看:
1 #include<vector> 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 6 struct student 7 { 8 int kaohao; 9 int defen; 10 int caifen; 11 int zongfen; 12 }; 13 14 bool compare(student a,student b) //比较a在b前则返回true,表示a在b前面 15 { 16 if(a.zongfen>b.zongfen) 17 return true; 18 else if(a.zongfen == b.zongfen) 19 { 20 if(a.defen>b.defen) 21 return true; 22 else if(a.defen==b.defen) 23 { 24 if(a.kaohao<b.kaohao) 25 return true; 26 } 27 } 28 return false; 29 } 30 31 int main() 32 { 33 vector<student> v1,v2,v3,v4;//表示四类考生 34 student stu;//学生信息临时保存 35 int count=0;//达标的学生总数 36 int N,L,H; 37 38 //cin>>N>>L>>H; 39 scanf("%d %d %d",&N,&L,&H); 40 int K,D,C; 41 while(N--) 42 { 43 //cin>>K>>D>>C; 44 scanf("%d%d%d",&K,&D,&C); 45 stu.kaohao = K; 46 stu.defen = D; 47 stu.caifen = C; 48 stu.zongfen = D+C; 49 if(D>=L && C>=L) 50 { 51 count++; 52 if(D>=H && C>=H) 53 v1.push_back(stu); 54 else if(D>=H && C<H ) 55 v2.push_back(stu); 56 else if(D<H && C<H && D>=C) 57 v3.push_back(stu); 58 else 59 v4.push_back(stu); 60 } 61 62 } 63 printf("%d\n",count); 64 sort(v1.begin(),v1.end(),compare); 65 sort(v2.begin(),v2.end(),compare); 66 sort(v3.begin(),v3.end(),compare); 67 sort(v4.begin(),v4.end(),compare); 68 69 vector<student>::iterator itr; 70 for(itr=v1.begin();itr!=v1.end();itr++) 71 printf("%d %d %d\n",itr->kaohao,itr->defen,itr->caifen); 72 for(itr=v2.begin();itr!=v2.end();itr++) 73 printf("%d %d %d\n",itr->kaohao,itr->defen,itr->caifen); 74 for(itr=v3.begin();itr!=v3.end();itr++) 75 printf("%d %d %d\n",itr->kaohao,itr->defen,itr->caifen); 76 for(itr=v4.begin();itr!=v4.end();itr++) 77 printf("%d %d %d\n",itr->kaohao,itr->defen,itr->caifen); 78 79 system("pause"); 80 return 0; 81 }
做这个题,我真的是花费了好长的时间,最后排序的时候,逻辑还出现了一点状况,导致后来实在是没有办法继续坚持下去。。。。所以再做一个题的时候,先思考清楚,再做题才是明智的。
也有可能以后不怎么用vector,但是多学习学习,说不定就用到了呢!
转载于:https://www.cnblogs.com/zxcjj/p/5355729.html
C++ 中vector的学习相关推荐
- java中vector容器,vector向量容器(常用的使用方法总结)
关于STL中vector容器的学习,编译运行后边看代码,边看执行结果效果更佳,还是想说看别人的代码一百遍,不如自己动手写一遍. vector向量容器不但能像数组一样对元素进行随机访问,还能随时在尾部插 ...
- CG中的深度学习 |Siggraph 2017 相关论文总结
原文链接https://blog.uwa4d.com/archives/1810.html 这是侑虎科技第249篇文章,感谢作者李旻辰供稿,欢迎转发分享,未经作者授权请勿转载.当然,如果您有任何独到的 ...
- STL中Vector的内存分配机制
一些好的公司校园招聘过程中(包括笔试.面试环节),经常会涉及到STL中vector的使用(主要是笔试)及其性能(面试)的分析.今天看了下相关文章,也写了几个小的测试程序跑了跑.算是总结下,希望对需要的 ...
- 在Tensorflow中使用深度学习构建图像标题生成器
by Cole Murray 通过科尔·默里(Cole Murray) 在Tensorflow中使用深度学习构建图像标题生成器 (Building an image caption generator ...
- 从原理到应用落地,一文读懂推荐系统中的深度学习技术
作者丨gongyouliu.zandy 来源丨大数据与人工智能(ID:ai-big-data) 2016年DeepMind开发的AlphaGo在围棋对决中战胜了韩国九段选手李世石,一时成为轰动全球的重 ...
- 深度学习中的表示学习_Representation Learning
一.深度学习网络的表达方式汇总及模型分类方法 人的大脑会对眼睛捕捉到的外界事物进行逐级抽象,逐渐提取出抽象的语义信息,以便为人脑所理解.深度学习从这一科学发现得到启发,通过网络的权值来捕捉外界输入模式 ...
- STL学习--vector的学习
(一):学习目标: 1:模板,包括函数模板和类模板 2:容器及其分类,以容器中的数据结构 3:容器vector和迭代器的具体用法 (二):学习 1:函数模板 /*** 学习模板函数*/ int max ...
- 强化学习(六) - 连续空间中的强化学习(RL in Continuous Spaces)及相关实例
强化学习(六) - 连续空间中的强化学习 6.1 连续空间中的强化学习 6.2 离散空间和连续空间 6.3 离散化 实例:小车上山 6.3.1 相关程序 6.3.2 程序注解 (1) 环境测试 (2) ...
- 3ds Max中的V-Ray学习
时长3h 30m 大小解压后:2.73G 包含项目文件 1280X720 MP4 语言:英语+中英文字幕(根据原英文字幕机译更准确) 3ds Max中的V-Ray简介:官方V-Ray导师 云桥网络 获 ...
最新文章
- 输入法编程教程---软键盘(小键盘?)类,C++编写
- 为什么说python是世界上最好的语言-python是世界上最好的语言
- 超图桌面版新建一个简单三维数据集并发布
- [云炬创业基础笔记]第四章测试22
- 转:什么是 Base64编码
- java栈的应用_Java堆栈应用程序
- 如何修改和配置idea编辑器的编码
- JavaScript对象创建对象的四种方式
- 洛谷 P1113 杂务
- LeetCode之翻转二叉树以匹配先序遍历
- Java设计模式应用——工厂模式
- 肯定存在无摩擦力的材料
- 软件项目经理应具备的素质和条件_IT项目经理必须具备的能力
- cmd怎么查看当前静态路由_怎么使用cmd设置添加电脑上静态路由
- 统一批量修改word页眉页脚
- 如何恢复Juniper防火墙管理员密码,手把手教你
- python_计算一张纸对折多少次超过珠峰
- ARCHPR(暴力破解压缩包密码软件)
- 蓝桥杯的比赛流程和必考点
- Python 爬取京东商品评论 + 词云展示
热门文章
- STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和串口只发送数据不能接收数据问题
- [YTU]_2640( 编程题:运算符重载---矩阵求和)
- Java设计模式学习之工厂模式
- toeplitz--生成托普利兹矩阵
- 使用预训练的卷积神经网络(猫狗图片分类)
- 二维矩阵与二维矩阵之间的卷积
- img文件解包工具_使用tar归档命令,就不怕文件多!
- ztree 拖动树结构的移动组件样式不见了怎么办?
- sqlserver中创建链接服务器图解教程
- Numpy_构建列向量