解析:刚开始没有反应过来题目是什么意思,仔细读了读才梳理出来:
输入的参数中ope是一个二维Vector数组,其中第二维度(也就是列)被限制为只有两个元素。例如ope[2][0]和ope[2][1]:
当ope[2][0]=1时,表示要入栈,ope[2][1]的值就是要插入的值。
当ope[]2[0]=2时,表示要出栈,此时ope[2][1]的值为空。
size为集合栈中每个栈的容量
class SetOfStacks {
public:
vector<vector<int> > setOfStacks(vector<vector<int> > ope, int size)
{
stack<stack<int>> myStack;
stack<int> temp;
int len=ope.size();
for(int i=0;i<len;i++)
{
//入栈的情况
if(ope[i][0]==1)
{ //栈满了
if(temp.size()==size)
{
myStack.push(temp);
stack<int>().swap(temp);
temp.push(ope[i][1]);
}
else//栈未满
{
temp.push(ope[i][1]);
}
}
//出栈情况
else if(ope[i][0]==2)
{
//栈空
if(temp.size()==0)
{
temp=myStack.top();
myStack.pop();
temp.pop();
}
else//栈未空
{
temp.pop();
}
}
}
//如果temp中还有元素,则temp作为一个未满的栈入栈
if(temp.size())
{
myStack.push(temp);
}
//将栈转化为二维vector输出
int row=myStack.size();
vector<vector<int>> ret(row);
for(int i=row-1;i>=0;i--)
{
stack<int> tempStack=myStack.top();
myStack.pop();
int col=tempStack.size();
vector<int> tempVector(col);
for(int j=col-1;j>=0;j--)
{
tempVector[j]=tempStack.top();
tempStack.pop();
}
ret[i]=tempVector;
}
return ret;
}
};