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