C++ 提供大量输入时,堆栈操作程序中的Abort调用错误
上面的代码是执行3个查询的基本堆栈程序。 查询1:将元素推送到堆栈中。 查询2:从堆栈中弹出最顶部的元素。 查询3:从堆栈中当前存在的元素中查找堆栈中的最大元素。C++ 提供大量输入时,堆栈操作程序中的Abort调用错误,c++,algorithm,data-structures,stl,C++,Algorithm,Data Structures,Stl,上面的代码是执行3个查询的基本堆栈程序。 查询1:将元素推送到堆栈中。 查询2:从堆栈中弹出最顶部的元素。 查询3:从堆栈中当前存在的元素中查找堆栈中的最大元素。 我已经使用向量来实现代码,但问题是,对于像和这样的大输入,会给出abort调用错误。此代码中的abort调用错误是由于边界情况,即如果两个 由于查询1中的条件,相同的元素一个接一个地插入,即如果您将在两个相同的元素上执行此条件ifx>c,那么它将不允许maxptr更新为c=x,条件ifx>c将变为false。您可以通过使用两个堆栈并对
我已经使用向量来实现代码,但问题是,对于像和这样的大输入,会给出abort调用错误。此代码中的abort调用错误是由于边界情况,即如果两个
由于查询1中的条件,相同的元素一个接一个地插入,即如果您将在两个相同的元素上执行此条件ifx>c,那么它将不允许maxptr更新为c=x,条件ifx>c将变为false。您可以通过使用两个堆栈并对代码进行少量修改来解决此问题。 它将通过所有测试用例
//Stack Operation
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
vector<int> stack;
vector<int>::iterator it;
int maxptr=-1;
it=stack.begin();
int n;
cin>>n;
for(int i=0,q,x,c=0,count;i<n;i++)
{
cin>>q;
if(q==1)
{
cin>>x;
stack.push_back(x);
if(x>c)
{
count=maxptr;
maxptr=stack.size()-1;
c=x;
}
}
else if(q==2)
{
if(stack.back()==stack.at(maxptr))
{
maxptr=count;
}
stack.pop_back();
if(maxptr==-1)
{
c=0;
}
else if(stack.size()==0)
{
c=0;
}
else
{
c=stack.at(maxptr);
}
}
else if(q==3)
{
cout<<stack.at(maxptr)<<endl;
}
}
}
你需要迭代器做什么?请不要链接到外部站点。发布问题中的所有相关内容。我曾考虑将其用于maxptr,但我没有使用。这些是代码失败的输入,并且这些输入非常大,这就是为什么我没有将它们包括在问题中。@Shantanudwidei-第一组输入根本不大,也不是巨大的输入。您的程序中只有一个基本错误。巨大的输入将是数百万或至少几十万个数据点,而不是几百个。
#include<cmath>
#include<cstdio>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
vector<int> stack;
vector<int> maxele;
int maxptr=-1;
int n,ct;
cin>>n;
for(int i=0,q,x,c=0;i<n;i++)
{
cin>>q;
if(q==1)
{
cin>>x;
stack.push_back(x);
if(x>=c)
{
maxele.push_back(x);
maxptr=maxele.size()-1;
c=x;
}
}
else if(q==2)
{
if(stack.back()==maxele.back())
{
stack.pop_back();
maxele.pop_back();
maxptr=maxele.size()-1;
}
else
{
stack.pop_back();
}
if(maxptr==-1)
{
c=0;
}
else if(stack.size()==0)
{
c=0;
}
else
{
c=maxele.at(maxptr);
}
}
else if(q==3)
{
cout<<maxele.at(maxptr)<<endl;
}
}
}