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;
}