zoukankan      html  css  js  c++  java
  • 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
    ",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
    ",itr->kaohao,itr->defen,itr->caifen);  
    72     for(itr=v2.begin();itr!=v2.end();itr++)  
    73         printf("%d %d %d
    ",itr->kaohao,itr->defen,itr->caifen);  
    74     for(itr=v3.begin();itr!=v3.end();itr++)  
    75         printf("%d %d %d
    ",itr->kaohao,itr->defen,itr->caifen);  
    76     for(itr=v4.begin();itr!=v4.end();itr++)  
    77         printf("%d %d %d
    ",itr->kaohao,itr->defen,itr->caifen);  
    78   
    79     system("pause");  
    80     return 0;  
    81 } 

    做这个题,我真的是花费了好长的时间,最后排序的时候,逻辑还出现了一点状况,导致后来实在是没有办法继续坚持下去。。。。所以再做一个题的时候,先思考清楚,再做题才是明智的。

    也有可能以后不怎么用vector,但是多学习学习,说不定就用到了呢

    每天都要进步一点,积少以成多。。。
  • 相关阅读:
    多测师讲解html _伪类选择器17_高级讲师肖sir
    多测师讲解html _后代选择器16_高级讲师肖sir
    多测师讲解html _组合选择器_高级讲师肖sir
    多测师讲解html _标签选择器14_高级讲师肖sir
    前端 HTML form表单标签 input标签 type属性 重置按钮 reset
    前端 HTML form表单标签 textarea标签 多行文本
    前端 HTML form表单标签 input标签 type属性 file 上传文件
    前端 HTML form表单标签 input标签 type属性 radio 单选框
    前端 HTML form表单标签 input标签 type属性 checkbox 多选框
    前端 HTML form表单目录
  • 原文地址:https://www.cnblogs.com/zxcjj/p/5355729.html
Copyright © 2011-2022 走看看