我正在试图查看我的堆栈结构的顶部元素以更改其属性:
stack<mat> stk;
...
mat parent = stk.top();
parent.cap -= n;
但这不会改变堆栈顶部的值。我认为这只是改变副本的价值。相反,我必须做这样的事情(我不确定它是否正确,但它有效):
stack<mat> stk;
...
mat * parent = &stk.top();
parent->cap -= n;
我在参考文献中读到stk.top()
返回对堆栈顶部元素的引用,那么为什么我的第一个示例不起作用呢?
答案 0 :(得分:6)
在这里,您将ref复制到新的mat
对象:
mat parent = stk.top();
如果您想使用引用,请使用如下引用:
mat& parent = stk.top();
答案 1 :(得分:1)
mat parent = stk.top(); // Will only copy the data into a new object
类mat似乎有一个operator =实现,以便它可以从另一个对象值复制。
这一行实际上做的是返回对顶部对象的引用,然后将其数据复制到新堆栈创建的对象mat parent上。
如果更改父值,它们将对堆栈中的原始对象没有影响。
上面的H2CO3是对的:
mat &parent = stk.top(); // gives you a handle to your top stacked object
是您使用案例的方法。
答案 2 :(得分:0)
而不是这些代码
mat parent = stk.top();
parent.cap -= n;
你可以写简单
stk.top().cap -= n;
在第一种情况下,您定义一个新的对象父对象,其中包含堆栈中对象状态的副本。