UVa101-The Blocks Problem/STL-Vector的使用

来源:互联网 发布:淘宝 虾米 vip兑换码 编辑:程序博客网 时间:2024/06/08 13:13

取出指令共同点,减少重复代码

利用STL中不定长数组vector

vector<int> a;//<double>也可以,这里a是构建了一个不定长一维数组,a[maxn]也可以,构建一个二维数组

a.size() //a的长度

a.push_back(b);//向a的尾部添加元素b,应该是不能加一串只加单个元素

a.resize(h);//将a的第h-1后的元素删掉,in other words, 保留前h个元素(notice:数组从0开始,第h个元素其数组中下标是h-1)

a.pop_back();//删除最后一个元素

#include <iostream>#include <string>#include <vector>#include <cstdio>using namespace std;const int maxn=30;int n;vector<int> pile[maxn];void found(int a,int &p,int &h){    for(p=0;p<n;p++)        for(h=0;h<pile[p].size();h++)            if(pile[p][h]==a)                return;}void clear_above(int p,int h){    for(int l=h+1;l<pile[p].size();l++)        pile[pile[p][l]].push_back(pile[p][l]);    pile[p].resize(h+1);}void move_above(int pa,int h,int pb){    for(int l=h;l<pile[pa].size();l++)        pile[pb].push_back(pile[pa][l]);    pile[pa].resize(h);}void printf(){    for(int k=0;k<n;k++){        printf("%d:",k);        for(int l=0;l<pile[k].size();l++)            printf(" %d",pile[k][l]);//printf("%s",pile[k])是不行的哦            cout<<endl;    }}int main(){    cin>>n;    int a,b;    string s1,s2;    for(int i=0;i<n;i++)        pile[i].push_back(i);    while(cin>>s1){        if(s1=="quit")            break;        cin>>a>>s2>>b;        int pa,pb,ha,hb;        found(a,pa,ha);        found(b,pb,hb);        if(pa==pb) continue;        if(s1=="move") clear_above(pa,ha);        if(s2=="onto") clear_above(pb,hb);        move_above(pa,ha,pb);    }    printf();    return 0;}


0 0
原创粉丝点击