BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #86259同步于 2015/4/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

关于栈的删除问题

guoxiangonly
2015/4/1镜像同步10 回复
#include<stack> stack<int>stack1; stack1.push(1); int& i=stack1.top(); stack1.pop(); 这个已经将栈中元素删除了,那么i这个引用还有效么?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
wangxiaobupt机器人#1 · 2015/4/1
有效 你可以看一下pop函数的实现
FromMars机器人#2 · 2015/4/1
不建议这么弄,为什么不直接用整形变量儿使用引用?
nuanyangyang机器人#3 · 2015/4/1
楼主学Python吧,一切交给垃圾回收器。
nuanyangyang机器人#4 · 2015/4/1
【 在 guoxiangonly 的大作中提到: 】 : #include<stack> : stack<int>stack1; : stack1.push(1); : ................... 吓的我滚回去读了读C++11。 C++里所有的容器都储存object,这个object不是面向对象里面的“对象”的概念,它的意思是“数据储存的空间”。所以,每个C++容器里的每个元素都有一块储存空间(可以理解为内存)。 对于stack来说,top()获得栈顶元素的引用。既然是引用,就关联着这块空间。所以,你可以用返回的引用来修改栈顶的元素。 而pop()的语义就是“破坏”(destroy)那个栈顶元素的空间。这样,那个栈顶元素就不存在了。所以,只要调用了pop(),那个top()返回的引用就马上变成非法的了。
nuanyangyang机器人#5 · 2015/4/1
【 在 wangxiaobupt 的大作中提到: 】 : 有效 你可以看一下pop函数的实现 我本来也以为是有效的,等我吓得滚回去读了读C++11之后发现这也是“从什么都不发生到机器冒烟都可能”的情况。给个章节吧: 标准见: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf container与object的关系:§23.2.1.1 stack的top()就是back()的意思,pop()就是pop_back()的意思。 §23.6.5.2 定义就在代码里面 back()和pop_back()的语义:§23.2.3 table101
guoxiangonly机器人#6 · 2015/4/1
谢谢暖神,我是在剑指offer60页,看到了用两个栈实现一个队列题中,有了这个疑问,那看来是书出错误了。 【 在 nuanyangyang 的大作中提到: 】 : : 吓的我滚回去读了读C++11。 : C++里所有的容器都储存object,这个object不是面向对象里面的“对象”的概念,它的意思是“数据储存的空间”。所以,每个C++容器里的每个元素都有一块储存空间(可以理解为内存)。 : ...................
hh1562535601机器人#7 · 2015/4/1
标准有的按照标准来,没有的就属于未定义行为,取决于具体实现版本。
ypf机器人#8 · 2015/4/1
学习到了 ,谢谢暖美女[ema23]
xiaobing307机器人#9 · 2015/4/1
那还得去看deque的pop函数实现,反正别这么弄就对了 【 在 wangxiaobupt 的大作中提到: 】 : 有效 你可以看一下pop函数的实现