【问题标题】:error: void value not ignored as it ought to be while assigning value to a pointer [duplicate]错误:在将值分配给指针时,不应忽略无效值[重复]
【发布时间】:2019-04-02 05:03:53
【问题描述】:

Q.)你得到一个大小和查询的数组。对于每个查询,您将获得数组的两个索引和 .从 to 生成的子数组是反转的。你的任务是确定子数组的最大和。

例如: 5 2 3 -1 4 2 -1 3 4 1 2 该输入的输出为 8 9。 作为: 给定数组是 {3,-1,4,2,-1}。

对于第一个查询 L=3 和 R=4。现在数组变为 {3,-1,2,4,-1}。

最大子数组和为8,子数组为{3,-1,2,4}。

对于第二个查询 L=1 和 R=2。现在数组变为 {-1,3,4,2,-1}。

最大子数组和为9,子数组为{3,4,2}。

#include <iostream>
#include<stack>

using namespace std;

void Reverse(int *a,int l,int r)
{
    stack<int>s;
    int i;
    for(i=l;i<=r;i++)
    {
        s.push(*(a+i));
    }
    for(i=l;i<=r;i++)
    {
        *(a+i)=s.pop();
    }
    //return(1);
}




int main() {

int n,q;
cin>>n>>q;
int a[n];
int i;
for(i=0;i<n;i++)
{
    cin>>a[i];
}
while(q)
{
    q--;
    int l,r;
    cin>>l>>r;
    Reverse(a,l-1,r-1);
}
for(i=0;i<n;i++)
{
    cout<<a[i];
}

}

我在 *(a+i)=s.pop(); 处遇到错误有人可以向我解释为什么会发生此错误以及删除它的方法。 任何帮助,将不胜感激。 PS:我知道这不是问题的完整解决方案。

【问题讨论】:

  • std::stack::pop 不返回任何内容(返回 void),但您正在尝试将其分配给一个值。你的意思是*(a+i)=s.top(); s.pop ();

标签: c++ arrays data-structures stack


【解决方案1】:

您必须首先使用s.top() 来获取堆栈的顶部元素。
s.pop() 仅删除堆栈顶部的元素,有效地将其大小减小一。它不返回任何东西。

因此,当您将其分配给*(a+1) 时,您会遇到问题中提到的错误。

【讨论】:

  • 做出了改变:*(a+i)=s.top();s.pop();我仍然将数组设为 -1 3 2 4 -1 而它应该是 -1 3 4 2 -1。?
  • 您的问题是关于我试图回答的错误。要获得正确的输出,您必须调试代码并进行必要的更改。
猜你喜欢
  • 1970-01-01
  • 2011-11-10
  • 2018-07-20
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
相关资源
最近更新 更多