• 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,但是多学习学习,说不定就用到了呢

    每天都要进步一点,积少以成多。。。
  • 相关阅读:
    NOIP初赛知识点大全-普及+提高组
    cron表达式详解,cron表达式写法,cron表达式例子
    n2n的编译和运行、配置
    Visual Studio 2017 扩展
    iis url重写
    http重定向到https
    基于git命令的代码统计方法
    UseSwagger
    docker中mysql数据库的数据导入和导出
    Win10远程桌面提示你的凭据不工作的处理方法
  • 原文地址:https://www.cnblogs.com/zxcjj/p/5355729.html
Copyright © 2020-2023  润新知