将链表更改为模板

时间:2017-03-28 15:20:41

标签: c++ templates linked-list

我写了一个链表,其中存储了关于学生的信息。如何将其更改为可以存储整数或任何其他类型的模板?我是否必须重载链表类中的方法,现在它们需要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();
};

2 个答案:

答案 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) );

如果您将数据视为单个对象,那么将列表转换为通用模板会更容易,因为它不再与数据紧密耦合。数据的格式是数据对象应该处理的细节。