首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

对于一个堆栈小程序的几点疑惑解决方法

2012-03-11 
对于一个堆栈小程序的几点疑惑yiqi的问题这是书上的一个例子,已经编译通过了,有几点不明白,麻烦大家看一看

对于一个堆栈小程序的几点疑惑
yiqi的问题


这是书上的一个例子,已经编译通过了,有几点不明白,麻烦大家看一看。  
//对堆栈进行处理的程序,包括压栈和出栈操作  

#include <iostream.h>  

class   Stack  
{  
struct   Node  
{  
int   content;  
Node   *next;  
}   *top;  
public:  
Stack(){top=NULL;}   //构造函数定义  
bool   push(int   i);   //压栈成员函数声明  
bool   pop(int   &i);   //出栈成员函数声明  
};  

bool   Stack::push(int   i)   //压栈成员函数的定义  
{  
Node   *p=new   Node;  
if(p==NULL)  
{  
cout < < "Stack   is   overflow.\n ";  
return   false;  
}  
else  
{  
p-> content=i;  
p-> next=top;  
top=p;  
return   true;  
}  
}  

bool   Stack::pop(int   &i)   //出栈成员函数的定义  
{  
if(top==NULL)  
{  
cout < < "Stack   is   empty.\n ";  
return   false;  
}  
else  
{  
Node   *p=top;  
top=top-> next;  
i=p-> content;  
delete   p;  
return   true;  
}  
}  

void   main()  
{  
Stack   st1,st2;   //定义对象st1和st2  
int   x;  
for(int   i=1;i <=5;i++)  
{  
st1.push(i);   //压栈成员函数的调用  
st2.push(i);   //压栈成员函数的调用  
}  
cout < < "stack1: " < <endl;  
for(   i=1;i <=3;i++)  
{  
st1.pop(x);   //出栈成员函数的调用  
cout < <x < <endl;  
}  
st1.push(20);  
for(   i=1;i <=4;i++)  
{  
if(st1.pop(x))  
cout < <x < <endl;  
else  
break;  
}  
cout < < "stack2: " < <endl;  
while(st2.pop(x))  
cout < <x < <endl;  
}  


1,想不明白为什么出栈成员函数bool   pop(int   &i)的参数要是地址变量   int   &i而不是int   i,这样做的目的是什么  
2,在MAIN函数中,只定义了第一个FOR循环中的i变量,   第二个和第三个FOR循环中的i变量没有定义。我试图改为for(   int   i=1;i <=3;i++)和for(int   i=1;i <=4;i++),但是编译时系统报错:declaration   of   i


http://bbs.csai.cn/bbs/view.asp?id={D7C3AA85-2096-427D-825D-75246E67EC28}

[解决办法]
1。因为int i是值传递,int &i是引用
值传递无法改变i的值,引用和指针可以,lz应该注意它们的区别
2。你的编译器是什么?有的编译器认为你的i重定义了
[解决办法]
1.bool pop(int &i)
其中int &i为i的引用,是C++的(C中没有),随便一本C++的书都有介绍,当然你也可用int *i;
2.的确与编译器有关,在BCB与gcc中,for(int i...)中的i的作用域为for遁环体内(你上面的程序不能被编译通用),而vc就是在该i定义之后直到函数结束
但我还没有碰到过;
for(int i....)
...
for(int i...)
不能编译的编译器
3.#include <iostream.h>
这个头文件是老的STL的(你的书应该是较旧的了)
一般现在用
#include <iostream>
using namespace std;
否则你的新版的编译器(如vc2003)下,程序不能被编译

热点排行