STL sector 应用

 1 #include <iostream>
 2 #include <string>
 3 #include <vector>
 4 #include <cstdio>
 5 using namespace std;
 6 int n;
 7 vector<int> pile[30];
 8 
 9 //找到a所在pile和height,以应用的形式返回调用者,
10 void find_block(int a,int &p,int &h)
11 {
12     for(p=0;p<n;p++)
13         for(h=0;h<pile[p].size();h++)
14             if(pile[p][h]==a)
15     return ;
16 }
17 
18 void clear_above(int p,int h)
19 {
20     for(int i=h+1;i<pile[p].size();i++)
21     {
22         int b=pile[p][i];
23         pile[b].push_back(b);
24     }
25     pile[p].resize(h+1);
26 }
27 void pile_onto(int p,int h,int p2)
28 {
29     for(int i=h;i<pile[p].size();i++) //pile[p].size()的容量大小
30         pile[p2].push_back(pile[p][i]);
31     pile[p].resize(h);//pile[p]的容量改成h大小
32 }
33 void print()
34 {
35     for(int i=0;i<n;i++)
36     {
37         printf("%d:",i);
38         for(int j=0;j<pile[i].size();j++)
39             printf(" %d",pile[i][j]);
40         printf("
");
41     }
42 }
43     
44 
45 int main()
46 {
47     int a,b;
48     scanf("%d",&n);
49     string s1,s2;
50     for(int i=0;i<n;i++)    
51         pile[i].push_back(i);
52     while(cin>>s1>>a>>s2>>b)
53     {
54         int pa,pb,ha,hb;
55         find_block(a,pa,ha);
56         find_block(b,pb,hb);
57         if(pa==pb)
58             continue;
59         if(s2=="onto")  clear_above(pb,hb);
60         if(s1=="move")  clear_above(pa,ha);
61         pile_onto(pa,ha,pb);
62         print();
63     }
64     
65     return 0;
66 }

vector类:

pile[p].size()看容量大小

pile[p].resize(n)调整vector容器的大小

pile[p].empty() 判断是否为空
begin()和end()函数--返回第一个元素和最后一个元素位置

front()和back()函数返回vector 中第一个元素和最后一个元素

push_back(x)和pop_back()在vector中最后插入一个元素和删除一个元素

vector 可以和数组一样,用下表表示
 
原文地址:https://www.cnblogs.com/WDKER/p/5471091.html