C++ 中vector的学习
2016-04-05 16:52
351 查看
根据各种做题,发现数组并不是很适用于各种情况,当涉及到内存占用的时候,数组可能就没有vector的优势了,而vector,动态数组,比较适合某些情况。
接下来看看比较基本的vector用法:
这里还用了一个迭代器访问元素。
注意点:
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();
在这个基础上,加上 头文件#include<algorithm> 中的sort() 方法,就可以得出排序好了的
这种是升序的,降序的话,sort(vec.begin(),vec.end(),Comp),这样就降序排序。
百度的Comp:
主要是以前虽然学过vector,但并没有真正去理解它,以后遇到一些数组处理不过来的问题,会尝试着利用vector的。
在PAT中,也有这种题目,我自己编译的话,主要的问题就是段问题,超哥说问题在于我的数组,之前曾写过各种排序算法的性能分析,当时由于想要看到时间,所以定义了一个二维数组,都很大int A[100][1000],记得只能写成这个样子,不然就不能运行了。所以,同理,可能这就是动态数组的好处,只是当时不能熟练地去利用vector这个容器。
下面来看PAT中的题目:
链接:https://www.patest.cn/contests/pat-b-practise/1015
这个题目要求的范围也比较大,动态数组用起来就很方便了。
因为我用的是数组,然后逻辑,就是比较排序出了一点点问题,然后就百度了看看:
做这个题,我真的是花费了好长的时间,最后排序的时候,逻辑还出现了一点状况,导致后来实在是没有办法继续坚持下去。。。。所以再做一个题的时候,先思考清楚,再做题才是明智的。
也有可能以后不怎么用vector,但是多学习学习,说不定就用到了呢!
接下来看看比较基本的vector用法:
#include<iostream> #include<vector> using namespace std; int main() { int i; int A[10]={9,5,8,6,4,2,3,7,0,1}; vector<int> V; for(i=0;i<10;i++) { V.push_back(A[i]); } vector<int>::iterator it; for(it=V.begin();it!=V.end();it++) { cout<<*it<<endl; } return 0; }
这里还用了一个迭代器访问元素。
注意点:
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();
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { int i; int A[10]={9,5,8,6,4,2,3,7,0,1}; vector<int> V; for(i=0;i<10;i++) { V.push_back(A[i]); } sort(V.begin(),V.end());//排序方法 vector<int>::iterator it; for(it=V.begin();it!=V.end();it++) { cout<<*it<<" "; } return 0; }
在这个基础上,加上 头文件#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
这个题目要求的范围也比较大,动态数组用起来就很方便了。
因为我用的是数组,然后逻辑,就是比较排序出了一点点问题,然后就百度了看看:
#include<vector> #include<cstdio> #include<algorithm> using namespace std; struct student { int kaohao; int defen; int caifen; int zongfen; }; bool compare(student a,student b) //比较a在b前则返回true,表示a在b前面 { if(a.zongfen>b.zongfen) return true; else if(a.zongfen == b.zongfen) { if(a.defen>b.defen) return true; else if(a.defen==b.defen) { if(a.kaohao<b.kaohao) return true; } } return false; } int main() { vector<student> v1,v2,v3,v4;//表示四类考生 student stu;//学生信息临时保存 int count=0;//达标的学生总数 int N,L,H; //cin>>N>>L>>H; scanf("%d %d %d",&N,&L,&H); int K,D,C; while(N--) { //cin>>K>>D>>C; scanf("%d%d%d",&K,&D,&C); stu.kaohao = K; stu.defen = D; stu.caifen = C; stu.zongfen = D+C; if(D>=L && C>=L) { count++; if(D>=H && C>=H) v1.push_back(stu); else if(D>=H && C<H ) v2.push_back(stu); else if(D<H && C<H && D>=C) v3.push_back(stu); else v4.push_back(stu); } } printf("%d\n",count); sort(v1.begin(),v1.end(),compare); sort(v2.begin(),v2.end(),compare); sort(v3.begin(),v3.end(),compare); sort(v4.begin(),v4.end(),compare); vector<student>::iterator itr; for(itr=v1.begin();itr!=v1.end();itr++) printf("%d %d %d\n",itr->kaohao,itr->defen,itr->caifen); for(itr=v2.begin();itr!=v2.end();itr++) printf("%d %d %d\n",itr->kaohao,itr->defen,itr->caifen); for(itr=v3.begin();itr!=v3.end();itr++) printf("%d %d %d\n",itr->kaohao,itr->defen,itr->caifen); for(itr=v4.begin();itr!=v4.end();itr++) printf("%d %d %d\n",itr->kaohao,itr->defen,itr->caifen); system("pause"); return 0; }
做这个题,我真的是花费了好长的时间,最后排序的时候,逻辑还出现了一点状况,导致后来实在是没有办法继续坚持下去。。。。所以再做一个题的时候,先思考清楚,再做题才是明智的。
也有可能以后不怎么用vector,但是多学习学习,说不定就用到了呢!
相关文章推荐
- 复利程序(c语言)(张俊毅 周修文)
- C#调用C++DLL传递结构体数组的终极解决方案
- c++封装之对象成员基础
- C++:可变数据成员
- C++之Dlib库实现68个特征点人脸的提取(根据Dlib官网例程改写)
- C语言 fork()笔试题
- 二叉树前序、中序和后序遍历相互求法
- 0035C++中vector类的常用函数
- 带min函数的栈
- C++_模板类与类型萃取技术
- C++类型别名
- C++虚函数
- C++ 字符串分隔
- java的优点,java与c++的区别
- c++基础复习:c++模板编程常用用法整理
- C++中进制转换
- gdb 查看c++中stl的内容
- C++中static的用法
- c++Primer5,高级主题
- C++使用json的方法,把include放到项目目录下