実世界のスタックのように機能するスタックを実装するプログラムを書いています。つまり、スタックのサイズがしきい値に達すると倒れるため、その新しい要素を挿入するために新しいスタックを作成する必要があります。
以下はこのための私のプログラムです:
#include <iostream>
#include<vector>
#include<stack>
using namespace std;
class stack_of_plates
{
vector<stack<int> > stacks;
unsigned int stack_size;
public:
stack_of_plates(unsigned int size=100)
{
stack_size=size;
}
void push(int data)
{
if(stacks.empty())
{
stack<int> *sptr= new stack<int>; //on debugging Segmentation fault at thisline
stacks.push_back(*sptr);
}
vector<stack<int> >::iterator it=stacks.end();
if(it->size()==stack_size)
{
stack<int> *sptr= new stack<int>; //on debugging Segmentation fault at thisline
stacks.push_back(*sptr);
}
it->push(data);
}
void pop()
{
if(stacks.empty())
{
cout<<"\nEmpty Stack";
return ;
}
vector<stack<int> >::iterator it=stacks.end();
if(it->empty())
{
it--;
}
it->pop();
}
int top()
{
if(stacks.empty())
{
cout<<"\nEmpty Stack";
return 0;
}
vector<stack<int> >::iterator it=stacks.end();
if(it->empty())
{
it--;
}
return it->top();
}
};
int main()
{
stack_of_plates ss;
ss.push(1);
ss.push(2);
cout<<ss.top();
return 0;
}
コンパイル時にエラーや警告は表示されません。ただし、プログラムは異常なエラーで終了します。新しいスタックの割り当てに問題があることを示すセグメンテーション違反エラーのデバッグ時。新しいスタックを割り当てるときにコードを変更する方法を教えてください。このエラーを取り除くのを手伝ってください。