C++ 交换堆栈c和x2B中的第一个和最后一个元素+;使用stl

C++ 交换堆栈c和x2B中的第一个和最后一个元素+;使用stl,c++,stack,C++,Stack,我创建了一个帐户,以便在STL中获得有关堆栈的帮助,我需要编写一个函数,该函数将堆栈作为参数,并将第一个元素与最后一个元素交换,我在网站上搜索了一些帮助,我找到了一个:“我尝试了相同的方法,但我不断得到以下错误:表达式必须有一个带红线的常量值。”“国际tmp[sz-1];". 在到达main之前,它一直给我错误,任何帮助都将不胜感激,请记住我正在尝试使用STL编写函数。 ps:我试着对回答问题的人发表评论,但这不允许我这样做,因为我需要50%的声誉 using namespace std; vo

我创建了一个帐户,以便在STL中获得有关堆栈的帮助,我需要编写一个函数,该函数将堆栈作为参数,并将第一个元素与最后一个元素交换,我在网站上搜索了一些帮助,我找到了一个:“我尝试了相同的方法,但我不断得到以下错误:表达式必须有一个带红线的常量值。”“国际tmp[sz-1];". 在到达main之前,它一直给我错误,任何帮助都将不胜感激,请记住我正在尝试使用STL编写函数。 ps:我试着对回答问题的人发表评论,但这不允许我这样做,因为我需要50%的声誉

using namespace std;
void rev(stack<int>&x){
    int sz=x.size(),mytop,mybottom;
    mytop=x.top();
    x.pop();
    int tmp[sz-1],i=0;
    while(!x.empty()){
        mybottom=x.top();
        tmp[i++]=mybottom;
        x.pop();
    } 
    stack<int> returnIt;
    returnIt.push(mybottom);
    for(i=0;i<=sz-3;i++){
        returnIt.push(tmp[i]);
    }
    returnIt.push(mytop);
    while(!returnIt.empty()){
        int tt=returnIt.top();
        x.push(tt);
        returnIt.pop();
    }
}
使用名称空间std;
无效版本(堆栈和x){
int sz=x.size(),mytop,mybottom;
mytop=x.top();
x、 pop();
int-tmp[sz-1],i=0;
而(!x.empty()){
mybottom=x.top();
tmp[i++]=mybottom;
x、 pop();
} 
堆栈返回它;
返回它。推(我的底部);

对于(i=0;i),您得到错误的原因是可变长度数组不是标准C++的一部分。这对于您定义的代码< TMP < /C> >:

很重要。
int tmp[sz-1], i=0; //sz is not known at compile-time, therefore, this is invalid code
有些编译器会通过允许VLA允许这样的代码,但不是标准的,您应该使用不同的解决方案。通常,对于这样的任务,
std::vector
是理想的:

std::vector<int> tmp(sz - 1);
int i = 0;
std::向量tmp(sz-1); int i=0;

这应该是可编译的(只要您将#include与其他include放在一起),并且应该具有您希望从代码中获得的行为。

如果可以,请以任何方式粘贴代码,我们将为您设置格式。如果没有适当的格式,我们将无法帮助您。我将其放在底部,就这样。是否必须将堆栈实现为?其默认的底层类型以其原始形式提供了更大的灵活性。感谢您的帮助,每个现在一切正常,所以问题似乎来自于我的编译器?@pi.ras,在我看来,将问题称为“编译器”是一种误导。你不应该期望任何编译器允许你尝试使用的构造。有些编译器会允许,但VLA是非标准的,并且(因此)没有得到普遍支持。