C++ 提供大量输入时,堆栈操作程序中的Abort调用错误

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。您可以通过使用两个堆栈并对

上面的代码是执行3个查询的基本堆栈程序。 查询1:将元素推送到堆栈中。 查询2:从堆栈中弹出最顶部的元素。 查询3:从堆栈中当前存在的元素中查找堆栈中的最大元素。
我已经使用向量来实现代码,但问题是,对于像和这样的大输入,会给出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;
        }        
    }
}