uva 101 vector+函数设计

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会写代码的孙悟空

赠人玫瑰 手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值