根据各种做题,发现数组并不是很适用于各种情况,当涉及到内存占用的时候,数组可能就没有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,但是多学习学习,说不定就用到了呢!

每天都要进步一点,积少以成多。。。
 此文转载!

c++中vector的学习的更多相关文章

  1. C++中vector小学习,顺便查了下<stdio.h>(或<cstdio>)

    今天看书,邻桌在看<C++ Primer>,拿过来看了一会儿.以前比较少用vector容器,看了下后,瞬间觉得好腻害的样子,就想试一下.嗯,就是试一下而已.(代码可能网上都差不多,有参考) ...

  2. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

  3. C++的STL中vector内存分配方法的简单探索

    STL中vector什么时候会自动分配内存,又是怎么分配的呢? 环境:Linux  CentOS 5.2 1.代码 #include <vector> #include <stdio ...

  4. PHP中的Libevent学习

    wangbin@2012,1,3 目录 Libevent在php中的应用学习 1.      Libevent介绍 2.      为什么要学习libevent 3.      Php libeven ...

  5. C++ 中vector的基本用法

    //在网上看了好久,自己总结了一下下,第一篇博客,呼呼,学到不少 基本概念 vector容器是一个模板类,可以存放任何类型的对象).vector对象可以在运行时高效地添加元素,并且vector中元素是 ...

  6. java中vector与hashtable操作详解

    众所周知,java中vector与hashtable是线程安全的,主要是java对两者的操作都加上了synchronized,也就是上锁了.因此 在vector与hashtable的操作是不会出现问题 ...

  7. [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)

    首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下:  C++ Code  1 2   template < class _Ty, cl ...

  8. c++中vector等容器的实现机制

    stl容器区别: vector list deque set map-底层实现 stl容器区别: vector list deque set map (转) 在STL中基本容器有: vector.li ...

  9. JS中childNodes深入学习

    原文:JS中childNodes深入学习 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <ti ...

随机推荐

  1. 浮点数转换为人名币读法字符串(JAVA)

    /*<java疯狂讲义>浮点数转换为人名币读法字符串这个用例,感觉没有考虑零的情况*/ import java.util.Arrays; public class Num2Rmb { pr ...

  2. 上传文件时,Request报文头不同浏览器会产生不同的content-type

    选择一个zip文件上传,用IE看的报文头是image/jpeg,用chrom看是application/octet-stream. 第一次遇到这个类型的content-type,百度了一下, octe ...

  3. 3G中的A-GPS移动定位技术

    位置业务(LBS,Location Based Service)是指移动网络通过特定的定位技术来获取移动终端的位置信息,从而为终端用户提供附加服务的一种增值业务,可广泛应用于紧急救援.导航追踪.运输调 ...

  4. Winform窗体

    Form窗体是Windows应用程序的基本单元.Form窗体不仅是一个窗口,还是一个容器,窗体内可以放置各种控件来实现各种功能.Form窗体也是对象,在窗体类Form中定义了生成窗体的模板,对窗体类进 ...

  5. Android listview下拉刷新 SwipeRefreshLayout

    今天在Google+上看到了SwipeRefreshLayout这个名词,遂搜索了下,发现竟然是刚刚google更新sdk新增加的一个widget,于是赶紧抢先体验学习下. SwipeRefreshL ...

  6. 转载-python学习笔记之文件I/O

    Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你 ...

  7. HDU(3555),数位DP

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others ...

  8. jquery easyui中文培训文档

    目  录 1.... Accordion(可折叠标签)... 2 1.1          实例... 2 1.2          参数... 3 2.... DateBox(日期框)... 4 2 ...

  9. LTMP手动编译安装以及全自动化部署实践(附详细代码)

    大家使用LNMP架构,一般可以理解为Linux Shell为CentOS/RadHat/Fedora/Debian/Ubuntu/等平台安装LNMP(Nginx/MySQL /PHP),LNMPA(N ...

  10. Android 内存溢出解决方案(OOM) 整理总结

    在最近做的工程中发现加载的图片太多或图片过大时经常出现OOM问题,找网上资料也提供了很多方法,但自己感觉有点乱,特此,今天在不同型号的三款安卓手机上做了测试,因为有效果也有结果,今天小马就做个详细的总 ...