利用STL实现动态数组

vector 的用法
1.vector定义了动态的不确定大小的数组
2.用法的操作很像队列的stl操作
3.vector<int>a 定义了一个不确定大小的一维数组a
    之后的具体操作:

    (1)a.push_back(x):相当于在a数组最后一个位置压入一个元素x,并且在开辟一个空间
       eg:a.push_back(1) 则 a[0]=1;
          继续
          a.push_back(2) 则 a[1]=2;
       所以要注意动态数组开空间是按顺序的,是从0开始的

    (2)理解了上面的关键操作后,列举出来其他操作:
        a.size():a数组中含有元素的个数
        扩展:
        vextor<int>a[100]
        a[x].size():二维数组a[x][]中不确定大小的那一维的元素个数
        a.clear():清空所有数据
        a.begin():返回第一个元素 eg:int k=a.begin():k为a数组中第一个元素,即a[0]
        a.end():返回最后一个元素

#include <bits/stdc++.h>
using namespace std;
#define maxn 100
vector<int>a[maxn];
int col[maxn];
int main(){
    ios::sync_with_stdio(false);
    int u,v;
    cin>>u>>v;
    a[u].push_back(v);
    cout<<a[1][0];
}

syzoj.com 最短路问题

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
vector<int>a[100001],b[100001];
queue<int>bfs;
int dis[100001];
int main(){
    memset(dis,127,sizeof(dis));
    dis[1]=0;
    int n,m;
    cin>>n>>m;
    int u,v,c;
    for(int i=1;i<=m;i++){
        cin>>u>>v>>c;
        a[u].push_back(v); 
        b[u].push_back(c);
    }
    bfs.push(1);
    while(!bfs.empty()){
        int city=bfs.front(); 
        bfs.pop();
        int num=a[city].size();
        for(int i=0;i<num;i++){
        int next=a[city][i]; //cout<<next<<endl;
        int next_c=b[city][i];
        dis[next]=min(dis[next],dis[city]+next_c);
                bfs.push(next);
            }
    }
    cout<<dis[n];
    return 0;
}

 

posted @ 2017-10-01 15:01  TimDucan  阅读(281)  评论(0编辑  收藏  举报