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 } 

时间: 2024-11-17 04:14:14

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

C++中vector小学习,顺便查了下&lt;stdio.h&gt;(或&lt;cstdio&gt;)

今天看书,邻桌在看<C++ Primer>,拿过来看了一会儿.以前比较少用vector容器,看了下后,瞬间觉得好腻害的样子,就想试一下.嗯,就是试一下而已.(代码可能网上都差不多,有参考) #include<iostream> #include<vector> //使用vector容器 #include<string> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { vector<

STL学习--vector的学习

(一):学习目标: 1:模板,包括函数模板和类模板 2:容器及其分类,以容器中的数据结构 3:容器vector和迭代器的具体用法 (二):学习 1:函数模板 /** * 学习模板函数 */ int max(int a,int b){ return a > b?a:b; } float max(float a,float b){ return a > b?a:b; } char max(char a,char b){ return a > b?a : b; } 但是类型是比较多的,所以每一

C++中vector reserve和resize函数

1.reserve 当内存受限时(此时虚拟内存都快耗尽),由于push_back由于每次发现存储空间不够时,默认会申请原来空间的两倍,此时申请空间时就会发生错误.因此如果知道 vector需要多少内存的话,最好先用 reserve申请一下空间 ,即预申请一定的空间. 2.resize 重新设置该容器的大小 <span style="font-size:14px;">// test_max.cpp : 定义控制台应用程序的入口点. #include "stdafx.

JS中模板嵌套学习(代码)

<script src="script/jquery-1.4.2.js"></script>    <script src="script/jsrender.js"></script>    <script id="header" type="text/x-jsrender">        <tr>               <th>序号&

ogqvcC++中vector和链表插入问题

叔滨劐 ogqvcC++中vector和链表插入问题

JS中childNodes深入学习

<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> <div id="box"> <div></div> <div></div> <div></div> </div> <script

Java中vector的使用方法

Vector的使用 vector类底层数组结构的,它包含可以使用整数索引进行访问的组件.不过,vector的大小可以根据需要增大或缩小,以适应创建vector后进行添加或移除项的操作,因此不需要考虑元素是否越界或者会不会浪费内存的问题. 由vector的iterator和listIterator方法所返回的迭代器是快速失败的:也即是它不能并发执行操作.如果在迭代器创建后的任意时间从结构上修改了向量(通过迭代器自身的remove或add方法之外的任何其他方式),则迭代器将抛出ConcurrentM

关于C++中vector和set使用sort方法进行排序

C++中vector和set都是非常方便的容器, sort方法是algorithm头文件里的一个标准函数,能进行高效的排序,默认是按元素从小到大排序 将sort方法用到vector和set中能实现多种符合自己需求的排序 首先sort方法可以对静态的数组进行排序 1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int a[10] = { 9, 0, 1, 2, 3, 7, 4, 5, 100, 10 }; 5 sort(a,

项目中走马观花式学习PHP

项目中走马观花式学习PHP 因项目缘故,需要快速补充php知识,个人有asp基础,较熟悉aspx.c#winform编写,故选择了快速阅读PHP相关资料.整理了一下,给大家参考.阅读的资料都是来自网络,我也不说不清作者是谁了,这里要对带我们这些菜鸟飞的前辈和大神们表示感谢.此外和我一样学过asp的朋友请百度一下php和asp语法的不同,对自己帮助很大. 第一部分相关知识补充 一.PHP准备工作 (一)PHP环境搭建(略) 建议使用apm,修改相关的参数即可搭建好环境.详情随便百度一下.... 第