vector   c++中封装好的类  头文件<vector>     是线性表的顺序表示   简单而又实用   推荐掌握哦!

Vectors 包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线性时间复杂度

Constructors 构造函数
Operators 对vector进行赋值或比较
assign() 对Vector中的元素赋值
at() 返回指定位置的元素
back() 返回最末一个元素
begin() 返回第一个元素的迭代器
capacity() 返回vector所能容纳的元素数量(在不重新分配内存的情况下)
clear() 清空所有元素
empty() 判断Vector是否为空(返回true时为空)
end() 返回最末元素的迭代器(译注:实指向最末元素的下一个位置)
erase() 删除指定元素
front() 返回第一个元素
get_allocator() 返回vector的内存分配器
insert() 插入元素到Vector中
max_size() 返回Vector所能容纳元素的最大数量(上限)
pop_back() 移除最后一个元素
push_back() 在Vector最后添加一个元素
rbegin() 返回Vector尾部的逆迭代器
rend() 返回Vector起始的逆迭代器
reserve() 设置Vector最小的元素容纳数量
resize() 改变Vector元素数量的大小
size() 返回Vector元素数量的大小
swap() 交换两个Vector

101这道题输入中有4个命令,一般我们会一个函数实现一个命令,但是我们仔细观察思考后会发现这4个命令有很大的相似性,所以我们把他们相似的部分抽象出来作为函数,首先是这两个函数:复原(归位)  移动。   然后还需要找到某个数字在哪个Blocks中哪个地方,把这个做成一个函数。

函数这个东西就像是我们为了完成一个任务而造工具,这些工具应该各不相同并且都非常有用才对。

我们在设计程序时应该花一些时间想想需要写哪些函数,而不是一股脑的想到什么函数就去写什么函数,这样往往花的时间多,效率低。

#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int maxn=30;
vector<int>amount[maxn];
int n;
void find(int wood,int &a,int &h)
{
 for(a=0;a<n;a++)
 for(h=0;h<amount[a].size();h++)
 if(amount[a][h]==wood)return;
}
void recover(int b,int h)
{
 int box;
 for(int i=h+1;i<amount[b].size();i++)
 {
  box=amount[b][i];
  amount[box].push_back(box);
 }
 amount[b].resize(h+1);
}
void print()
{
 for(int i=0;i<n;i++)
 {
  cout<<i<<":";
  for(int j=0;j<amount[i].size();j++)
  {
   cout<<' '<<amount[i][j];
  }
  cout<<"\n";
 }
}
void move(int b1,int b2,int h1)
{
 for(int i=h1;i<amount[b1].size();i++)
 {
  amount[b2].push_back(amount[b1][i]);
 }
 amount[b1].resize(h1);
}
int main()
{
 int w1,w2,b1,b2,h1,h2;
 string s1,s2;
 //freopen("input.txt","r",stdin);//不删了我就等死吧!!!
 for(int i=0;i<maxn;i++)
 {
  amount[i].push_back(i);
 }
 cin>>n;
 while(cin>>s1>>w1>>s2>>w2)
 {
  //if(s1=="quit")break;      //这个可以不写 quit代表流结束了 自然while循环就终止了
  find(w1,b1,h1);
  find(w2,b2,h2);
  if(b1==b2)continue;
  if(s1=="move")recover(b1,h1);
  if(s2=="onto")recover(b2,h2);
  move(b1,b2,h1);
 }
 print();
 return 0;
}