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

c++中的stack,该如何处理

2013-06-26 
c++中的stack#include iostream#include stackusing namespace stdint main(){stackint stack1sta

c++中的stack

#include <iostream>
#include <stack>
using namespace std;

int main()
{
stack<int> stack1;
stack1.push(1);
stack1.push(2);
int &data = stack1.top();
stack1.pop();
cout<<data<<endl;//输出2
data = stack1.top();
stack1.pop();
cout<<data<<endl;//输出-572662307
return 0;
}

本来压入的是1、2,出栈的顺序应该是2、1,但2正常出栈,1出栈时发生错误,但是如果把data变量改为int data,不将其设为引用变量,则正常出栈,即2、1顺序。
小弟初学c++,对stl代码没有研究过,还请各位帮忙解答一下,谢谢!!!
[解决办法]
区别在于int & 和int

前面一个指向int的一个引用,后者是一个int变量

data = stack1.top(); 此时int&指向了1这个变量的地址,立即输出data的值  是1
    stack1.pop(); 1这个变量的地址被释放,之后在输出data的值 ,什么值都有可能
[解决办法]
    int &data = stack1.top(); // (1)
    data = stack1.top(); // (2)
LZ觉得这两句的语义是什么?

个人的理解是:
data引用(1)处的stack1.top()(一旦引用,不能引用别的东西),运行到(2)时,再用(2)这时的stack1.top()来修改(1)那个时候的stack1.top()

是不是有点绕?

抛开stack,单看引用:

#include <iostream>

using namespace std;

int main()
{
    int a = 1;
    int & b = a;
    b = 2;
    cout << a << '\n' << b << '\n';

    return 0;
}

热点排行