c++ - 使用外部函数进行堆栈推送

标签 c++ class stack

我正在尝试使用 C++ 中的构造函数来实现堆栈。我需要使用外部函数将元素插入堆栈,但是,它似乎无法正常工作。 PushExternal 函数似乎“进入”了 Push 函数,但它不会增加 ind 值,因此它不会向堆栈添加新元素(例如在我的代码中,所有 PushXternals 都会尝试将值推送到相同的索引,s.push 使用的最后一个索引 - ind==2)。我不确定我做错了什么。

哦,我只需要修改类代码 - Pushexternal 和 main 必须保持不变。

#include <iostream>
using namespace std;

class Stack {
    public:
    int ind;
    int * arr;

Stack()
{
    arr = new int[25];
    ind = -1;
}
~Stack()
{
    delete [] arr;
}

void push(int val)
{
    arr[++ind] = val;
    cout << "Added " << arr[ind] << " to " << ind << endl;
}

void top()
{
    cout << "Last: " << arr[ind];
}
};

void pushexternal(Stack s, int a) {
    s.push(a);
}

int main() {
    Stack s;
    s.push(0);
    s.push(1);
    s.push(2);
    pushexternal(s, 3);
    pushexternal(s, 4);
    pushexternal(s, 5);
    return 0;
}

结果:

Added 0 to 0
Added 1 to 1
Added 2 to 2
Added 3 to 3
Added 4 to 3
Added 5 to 3
Top: 2

最佳答案

void pushexternal(Stack s, int a) {
    s.push(a);
}

接收一个 Stack 作为参数,这意味着它接收一个对象,该对象是您的对象的拷贝。

你应该对引用进行操作,这样你就不会发送要操作的对象的拷贝,而是发送该对象的引用,从而操作原始对象。

关于c++ - 使用外部函数进行堆栈推送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36236355/

相关文章:

c++ - 虚函数歧义求解

php - 类抽象不起作用

c++ - std::stack<boost::shared_ptr<T>> 的深拷贝

c++ - 后缀表示法计算器 (RPN) 问题 C++

c++ - Gnu make:生成所有子目录的列表

c++ - 对“base_rec::showme()”的 undefined reference 错误

c++ - Qt中的空文件

c# - 在部分类中设置属性的属性

java - 创建扩展内部抽象类的匿名类

组装多次推送不考虑推送列表顺序