gpt4 book ai didi

c++ - 为什么我的链接列表在函数调用后被删除?

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:47 25 4
gpt4 key购买 nike

在下面的代码中,我尝试创建一个字符串链表。然后,我使用链表存储由递归调用自身的函数(名为 myFunction)生成的输出。在测试/调试代码时,我注意到如果在执行函数(应该将项目添加到链表)后打印链表的内容,则不会打印任何内容。但是,如果我尝试在从函数内部添加项目后打印链接列表,它工作正常。

似乎在调用myFunction 后删除了整个链表。另一方面,我在向链表添加元素时使用动态内存分配,所以我看不到问题。

请帮忙!

#include <cstdlib>
#include <iostream>

template <class T>
class node{
public:
node *next;
T data;
node(){next=0;};
void print();
};

template <class T>
void node<T>::print(){
std::cout << data;
}


template <class T>
class List{
public:
node<T> *head;
List(){head=0;};
void add(T data);
void print();
int len();
};

template <class T>
int List<T>::len(){
int i=0;
node<T> *current=head;

while(current!= 0){
i++;
current=current->next;
}
return i;
};

template <class T>
void List<T>::add(T myData){
node<T> *current=head;
if(head==0){
head= new node<T>;
head->data=myData;
}
else{

while(current->next!=0){
current=current->next;
}

current->next = new node<T>;
current->next->data=myData;
}
}

template <class T>
void List<T>::print(void){
node<T> *current=head;
if(head==0){
return;
}
else{
do{
std::cout << current->data << " ";
current=current->next;
}while(current!=0);
}
}

void myFunction(List<std::string> myList, int n, std::string starter, int leftParens, int rightParens){
int remainingLength = leftParens+rightParens;
if(remainingLength==0){
myList.add(starter);
std::cout <<myList.len() << std::endl;

}
if(leftParens >0){
myFunction(myList, n, starter+"(", leftParens-1, rightParens);
}
if(leftParens==0 and rightParens >0){
myFunction(myList, n, starter+")", leftParens, rightParens-1);
}

}


int main(int argc, char** argv) {

List<std::string> myList;

myFunction(myList, 5, "", 5, 5);
std::cout <<myList.len();

}

最佳答案

您正在按值将 myList 传递给 myFunction。在函数中对 myList 所做的任何更改都是对拷贝的更改,而不是对 main 中原始 myList 的更改。

更改 myFunction 以便它通过引用接受其参数。然后,在 myFunction 中对其所做的任何更改也将在 main 中可见。

void myFunction(List<std::string>& myList, int n,
// ^^
std::string starter, int leftParens, int rightParens){

关于c++ - 为什么我的链接列表在函数调用后被删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34533326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com