2、STL之vector
程序员文章站
2022-07-12 14:38:02
...
例题:
大意:
move a onto b move a over b pile a onto b pile a over b quit
5种不同的指令,实现5种不同的操作。
知识点:
因为木块堆的高度不确定,所以使用vector中的vector结构来存储。
vector就像一个二维数组,只是第一维的大小是固定的,第二维的大小不固定。
const int maxn = 25;
vector<int> pile[maxn];
pile[i].clear();
pile[i].resize(h);
pile[i].push_back();
pile[i].pop_back();
pile[i].empty();
代码:
#include<iostream>
#include<vector>
#include<string>
#include<sstream>
using namespace std;
//move a onto b;move a over b;pile a onto b;pile a over b;
const int maxn=25;
vector<int> pile[maxn];
int n;
void find_block(int& pa,int& ha,int a){
for(pa = 0;pa<n;pa++){
for(ha = 0;ha<pile[pa].size();ha++){
if(pile[pa][ha] == a){
return;
}
}
}
}
void clear_above(int p,int h){
for(int i = h+1;i < pile[p].size();i++) pile[pile[p][i]].push_back(pile[p][i]);
pile[p].resize(h+1);
}
void move_blocks(int p1,int h1,int p2){
for(int i = h1;i<pile[p1].size();i++){
pile[p2].push_back(pile[p1][i]);
}
pile[p1].resize(h1);
}
void print(){
for(int i = 0;i<n;i++){
cout << i << ":";
for(int j = 0;j<pile[i].size();j++){
cout << " " << pile[i][j];
}
cout << endl;
}
}
int main(){
cin>>n;
for(int i = 0;i<n;i++){ // 创建向量
pile[i].push_back(i);
}
string s1,s2;
int a,b;
while(cin>>s1){
if(s1 == "quit") break;
cin >> a >> s2 >> b;
int pa,pb,ha,hb;
find_block(pa,ha,a);
find_block(pb,hb,b);
if(pa==pb) continue;
if(s1 == "move"){
clear_above(pa,ha);
}
if(s2 == "onto"){
clear_above(pb,hb);
}
move_blocks(pa,ha,pb);
}
print();
return 0;
}