使用外部函数的堆栈推送 我试图用C++中的构造函数实现栈。我需要使用一个外部函数将元素推送到堆栈上,但是,它似乎不能正常工作。pushexternal函数似乎“输入”了push函数,但它不会增加ind值,因此它不会向堆栈中添加新元素(例如,在我的代码中,所有PushExternals都会尝试将值推送到同一个索引上,最后一个索引由s.push-ind==2使用)。我不确定我做错了什么
哦,我只需要修改类代码-pushexternal和main必须保持不变使用外部函数的堆栈推送 我试图用C++中的构造函数实现栈。我需要使用一个外部函数将元素推送到堆栈上,但是,它似乎不能正常工作。pushexternal函数似乎“输入”了push函数,但它不会增加ind值,因此它不会向堆栈中添加新元素(例如,在我的代码中,所有PushExternals都会尝试将值推送到同一个索引上,最后一个索引由s.push-ind==2使用)。我不确定我做错了什么,c++,class,stack,C++,Class,Stack,哦,我只需要修改类代码-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[
#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;
}
接收堆栈作为参数,这意味着它接收的对象是对象的副本
您应该对引用进行操作,这样您就不会发送要操纵的对象的副本,而是发送对象的引用,从而操纵原始对象
void pushexternal(Stack s, int a) {
s.push(a);
}
您正在通过值而不是引用将堆栈
对象传递到此函数。这将生成原始堆栈
对象的临时副本,因此原始对象保持不变。更不用说这会导致内存损坏,因为违反了RAII
原则
我想,幸运的是,您的代码没有出现错误。谢谢,通过引用传递是正确的。但是,它需要我更改pushexternal函数(void pushexternal(Stack&s,inta))。在这个任务中,我正在使用的书希望我保持pushexternal和main函数不变,只更改类的代码。我不确定,因为我还没有尝试过,但在这种情况下使用副本构造函数会有帮助吗?副本构造函数用于使用来自已存在对象的数据初始化对象。这对您没有帮助,因为您的函数从函数参数获取堆栈并对其进行操作。我的猜测是,这个例子要么是错的,要么这本书希望你找出“错误”。
void pushexternal(Stack s, int a) {
s.push(a);
}
void pushexternal(Stack s, int a) {
s.push(a);
}