在下面的代码中,我尝试创建一个字符串链表。然后我使用链表来存储由函数(名为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();
}
答案 0 :(得分:5)
您按价值将myList
传递给myFunction
。对函数myList
所做的任何更改都是对副本的更改,而不是myList
中的原始main
。
更改myFunction
,使其通过引用接受其参数。然后,在myFunction
中也可以看到main
中对其所做的任何更改。
void myFunction(List<std::string>& myList, int n,
// ^^
std::string starter, int leftParens, int rightParens){
答案 1 :(得分:2)
<!DOCTYPE html>
<html>
<head>
<script src="jquery-2.1.4.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
$("#div1").load("rao.txt");
});
});
</script>
</head>
<body>
<div id="div1"><h2>Let jQuery AJAX Change This Text</h2></div>
<button>Get External Content</button>
</body>
</html>
中的变量),则需要使用引用。main
的电话一样]