在ACM中【vector】容器向量的好用之处【STL】

2019-04-30  本文已影响0人  程序员白泽

首先简单介绍一下vector,它是stl标准模板库中的一个容器,意思是向量,那么顾名思义,通过借助vector我们可以实现数与数之间一对一乃至一对多的关系

一对一的情况如下:

当我们新建一个vector容器的时候如果不指定它的长度,他将以动态的方式随着数据的插入而不断扩充,像是一个动态的一维数组,但这种用法在此将不具体讲述,因为和一维数组实在太像了,“向量”二字的优势没有体现出来

图示不指定长度的vector图示:

v1.png

简单示例代码:

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;

vector<int> r;

int main(){
    int n;
    while(cin>>n){
        for(int i=1;i<=n;i++){
            int x;
            cin>>x;
            r.push_back(x);     //向r的最后一个位置插入一个x,r的长度会逐渐增长 
        }
        cout<<r.size()<<endl;   //输出r的长度 
        for(vector<int>::iterator it=r.begin();it!=r.end();it++){   //通过迭代器的方式遍历r中的每个数 
            cout<<*it<<endl;
        }
        cout<<r[0]<<endl;       //通过下标的方式输出向量对应的值 
        cout<<r[1]<<endl;       
        cout<<r.front()<<endl;  //访问第一个元素 
        cout<<r.back()<<endl;   //访问最后一个元素 
        r.clear();          //清空向量容器 
    }
    return 0;
}

一对多的情况如下:

在我们做题的时候需要有一种现成的方法能将一个数字与多个数字以一对多的形式串起来,比如从一个点可以直接到达的三个点,通过指定定长的vector容器便可以达到这种效果,先上图:

v2.png

每一个点都是一个独立的个体,也可以形象地比作一个动态的二维数组,下标为0的点又是一个容器,它也从下标0开始存放了三个数12,13,13,我们可以通过与一对一时类似的方法去调用还有插入元素

简单的代码示例:

#include<iostream>
#include<algorithm>
#include<vector>
#include<cstdio>
using namespace std;

vector<int> r[100];

int main(){
    int n;
    while(cin>>n){
        for(int i=0;i<100;i++) r[i].clear();    //由于每一个r[i]都是一个独立的个体,需要依次清空 
        for(int i=1;i<=n;i++){      //只为下标为1的向量容器不断插入n个数,下标也从0开始 
            int x;
            cin>>x;
            r[1].push_back(x);
        }
        cout<<r[1].size()<<endl;    //输出单个下标为1的向量容器的大小 
        cout<<r[1][0]<<endl;        //类似于一个二维数组,输出下标为1的容器中下标为0的元素存放的数值 
        cout<<r[1][1]<<endl; 
    }
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读