将相同大小的两个堆栈的值相加
Adding values of two stacks of the same size
我只是在练习创建一个堆栈类,并试图重载operator=
和operator+
。到目前为止,我已经成功地使operator=
过载。
假设我的目标是能够在主中执行st3 = st1 + st2;
操作,其中st1、st2、st3是类堆栈的对象,并且假设它们都具有相同的大小并且都是int值。
现在st3没有返回任何值。
在我的课堂上,我有:
stack& operator+(stack& otherStack){
int sum = 0;
stack res;
while ((!this->isEmpty()) && (!otherStack.isEmpty())) {
sum = this->top() + otherStack.top();
res.push(sum);
this->pop();
otherStack.pop();
}
return res;
}
这是我使用递归的print()
函数,它也在class stack
中。它只打印st1和st2很好的
void printStack(){
if (isEmpty())
return;
int x = this->top();
this->pop();
this->printStack();
this->push(x);
}
stack& operator+(stack& otherStack){ stack res; ... return res; }
res
是一个自动变量。当它超出范围时,它的寿命就结束了;即当函数返回时。返回一个对该对象的引用,该对象的生存期已结束。返回的引用总是挂起的,尝试访问对象将导致未定义的行为。
解决方案:返回一个对象;而不是引用。
修改操作数的Operator+是非常规的,我强烈建议不要这样设计。
相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 如何返回一个类的两个对象相加的结果
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 堆栈分配的类类型.为什么两个 ID 实例的地址相同?
- 当两个函数位于一行中时,堆栈框架的样子
- 查看使用堆栈是否相等的两个字符串
- 系统堆栈中的两个函数的递归调用(将不同数量的数组作为参数传递)有什么区别
- 如何在C++中检查两个堆栈是否相同
- C++堆栈实现 - 两个版本的 top 方法
- 将两个图像堆栈的非电源加载到 3D 纹理 OpenGL C++
- C++ 使用两个附加堆栈反转堆栈
- 如何循环两次,将不同的值插入两个不同的堆栈
- 用两个堆栈实现队列——脱队列测试问题
- 两个暗淡的数组,指向它的一部分和堆栈损坏
- 在c++中将两个相关的std::堆栈合并为std::map的计算效率如何?
- 如何使用数组以升序成对两个堆栈
- 两个线程从无锁堆栈中删除