我写了一个链表,其中存储了关于学生的信息。如何将其更改为可以存储整数或任何其他类型的模板?我是否必须重载链表类中的方法,现在它们需要6个参数?我的意思是,现在最后插入的方法(对于学生数据)如下所示:
void insertAtEnd(int index, string name, string surname, int yearOfStudy, string fieldOfStudy, string specialty);
如果我想存储整数,它将如下所示:
void insertAtEnd(int Data);
因此,如果我想使用模板添加学生,例如整数,它应该是这样吗?
template <class T>
Class llist{
void insertAtEnd(int index, string name, string surname, int yearOfStudy, string fieldOfStudy, string specialty);
void insertAtEnd <T Data>;
}
以下是student和linkedlist类的实现:
class student {
public:
int index;
string name;
string surname;
int yearOfStudy;
string fieldOfStudy;
string specialty;
student *next; //pointer to next item
student();
};
student::student() {
next = 0;
}
class llist {
public:
void insertAtEnd (int index, string name, string surname, int yearOfStudy, string fieldOfStudy, string specialty);
void insertAtBeginning (int index, string name, string surname, int yearOfStudy, string fieldOfStudy, string specialty);
void insertAtGivenPosition(int a, string n, int index, string name, string surname, int yearOfStudy, string fieldOfStudy, string specialty);
void findStudent(int index, string surname);
void deleteLast ();
void deleteSelected(int index, string surname);
void deleteAll ();
void displayList ();
student *first; //pointer on first elem
llist();
};
答案 0 :(得分:1)
在您的问题的限制范围内,如果它在我的位置,我会将您的班级结构更改为:
class student {
public:
int index;
string name;
string surname;
int yearOfStudy;
string fieldOfStudy;
string specialty;
//student *next; //pointer to next item
student();
};
template <class T>
class node {
T data;
node<T> *next;
}
template <class T>
class llist {
public:
void insertAtEnd (const T &data);
.
.
.
private:
node<T> *list;
}
看看上面的伪代码,看看它是如何回答你的问题。
答案 1 :(得分:0)
为要存储的类型创建构造函数,然后只需发送一个参数。或者您可以传入简单对象的初始化列表: -
push( {"student name", "age", major} );
从技术上讲,这只是一个参数,假设字段与“student”结构/类中的顺序匹配,因此它们只作为一个事物传递。然后,您可以轻松地将列表重新编码为模板。或者你在push命令中调用构造函数:
push( Student("student name", "age", major) );
如果您将数据视为单个对象,那么将列表转换为通用模板会更容易,因为它不再与数据紧密耦合。数据的格式是数据对象应该处理的细节。