簡體   English   中英

C ++中的推/彈出堆棧類程序?

[英]Push/pop stack class program in C++?

我已經從C ++書中編寫並修改了一個示例代碼,該代碼關於從堆棧類中推入/彈出數字。 這是一個基本問題,僅供我理解。這是代碼。

//stakarray.cpp
//a stack as a class
#include <iostream>
using namespace std;

class Stack
{
  private:
    enum { MAX = 10 };
    //int MAX=10;
    int st[MAX];
    int top;
  public:
    Stack()
    { top=0; }
    void push(int var)
    { st[++top]=var; } //increments stack, input var
    int pop()
    { return st[top--]; } //returns var, decrements stack
    void show(int var)
    { cout << st[var]<< endl; }
};
int main()
{
  //some stack operations
  int i;
  Stack s1;
  s1.push(11);
  s1.push(22);
  cout<<"1: "<<s1.pop()<<endl; //22
  cout<<"2: "<<s1.pop()<<endl; //11
  s1.push(33);
  s1.push(44);
  s1.push(55);
  s1.push(66);
  for (i=0; i<= 10 ; i++)
  {
   cout<< "s1[" << i << "]= ";
   s1.show(i); 
  }
  return 0;
}

該程序的輸出為

1: 22
2: 11
s1[0]= 2
s1[1]= 33
s1[2]= 44
s1[3]= 55
s1[4]= 66
s1[5]= 0
s1[6]= 0
s1[7]= 0
s1[8]= 4196896
s1[9]= 0
s1[10]= 4

為什么s1 [0] = 2,s1 [8] = 4196896,s1 [10] = 4? 還有從私有方式訪問MAX的任何方法,還是我必須在類的其他地方定義它(不用作全局變量或main()的一部分)?

永遠不會使用元素0,因為在推入操作中,您使用前遞增(++ top)而不是后遞增(top ++)。

您的堆棧一次最多包含4個元素,因此索引4之后的所有元素都具有未定義的內容(即s1 [5] ... s1 [10]中的隨機垃圾)。

在您的代碼中,您在設置值之前用++top遞增++top遞增了++top 因此,top將轉到1,然后將s1[1]=33 如果切換到post-increment top++ ,則計數器變量top將在設置s[0]=33

//stakarray.cpp
//a stack as a class
#include <iostream>
using namespace std;

class Stack
{
  private:
    enum { MAX = 10 };
    //int MAX=10;
    int st[MAX];
    int top;
  public:
    Stack()
    { top=0; }
    void push(int var)
    { st[top++]=var; } //increments stack, input var
    int pop()
    { return st[top--]; } //returns var, decrements stack
    void show(int var)
    { cout << st[var]<< endl; }
};
int main()
{
  //some stack operations
  int i;
  Stack s1;
  s1.push(11);
  s1.push(22);
  cout<<"1: "<<s1.pop()<<endl; //22
  cout<<"2: "<<s1.pop()<<endl; //11
  s1.push(33);
  s1.push(44);
  s1.push(55);
  s1.push(66);
  for (i=0; i<= 10 ; i++)
  {
   cout<< "s1[" << i << "]= ";
   s1.show(i); 
  }
  return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM