/**
请实现一种数据结构SetOfStacks,
由多个栈组成,其中每个栈的大小为size,
当前一个栈填满时,新建一个栈。
该数据结构应支持与普通栈相同的push和pop操作。
给定一个操作序列int[][2] ope(C++为vector<vector<int>>),
每个操作的第一个数代表操作类型,
若为1,则为push操作,后一个数为应push的数字;
若为2,则为pop操作,后一个数无意义。
请返回一个int[][](C++为vector<vector<int>>),
为完成所有操作后的SetOfStacks,顺序应为从下到上,
默认初始的SetOfStacks为空。保证数据合法。
当涉及到二维数组时,可以使用一维数组临时变量,
一维数组的语义是:二维数组中的最后一行
涉及到多维数组时,需要将一维数组作为单元添加到多维数组中
而不能将一个个元素作为单元添加到多维数组中
**/
#include<iostream>
using namespace std;
#include<vector>
class SetOfStacks {
public:
vector<vector<int> > setOfStacks(vector<vector<int> > ope, int size) {
// write code here
vector<vector<int> > result;
vector<int> temp_line;
for(unsigned int i=0;i<ope.size();i++){
if(ope[i][0]==1){
// 说明为push操作
if(temp_line.size()==size){
result.push_back(temp_line);
temp_line.clear();// 清空一维向量
temp_line.push_back(ope[i][1]);
}
else{
temp_line.push_back(ope[i][1]);
}
}
else{
if(temp_line.size()==0){
// 说明当前的一维向量是空
temp_line=result[result.size()-1];
result.pop_back();
temp_line.pop_back();
}
else{
temp_line.pop_back();
}
}
}
if(temp_line.size()>0){
result.push_back(temp_line);
}
return result;
}
};
int main(){
vector<vector<int> > ope,output;
int a1[]={1,2};
int a2[]={1,6};
int a3[]={1,8};
int a4[]={2,2};
vector<int> line1(a1,a1+2);
vector<int> line2(a2,a2+2);
vector<int> line3(a3,a3+2);
vector<int> line4(a4,a4+2);
ope.push_back(line1);
ope.push_back(line2);
ope.push_back(line3);
ope.push_back(line4);
// cout<<"hahaha"<<ope[0].size()<<endl;
SetOfStacks s;
output=s.setOfStacks(ope,2);
cout<<output.size()<<"length of output in dimension 1"<<endl;
cout<<output[0].size()<<"length of output in dimension 2"<<endl;
for(unsigned int i=0;i<output.size();i++){
for(unsigned int j=0;j<output[0].size();j++){
cout<<output[i][j]<<endl;
}
};
return 0;
}