OOP,使用类的链表
OOP, Linked list using classes
我有一类事件。现在我所要做的就是创建事件并将它们存储在链表中。但我不知道如何固定头部位置。我的意思是,如果我在构造函数中将 head 定义为 NULL,那么对于每个新事件,它将重新定义为 NULL。因此,我的链表中只有一个事件。我的代码是这样的:
// event.h
class event{
private:
Event *head;
Event *nxt;
int date;
string name;
public:
event();
event(int d, string n);
Add_item();
}
//event.cpp
event::event(){}
event::event(int date, string name): date(date), name(name){
head=NULL;
现在每次我调用构造函数时,head 都会被重新定义为 NULL。我该怎么办???
首先,代码显示class Event
是自包含的。也就是说,head
和nxt
是对象本身的一部分。如果您希望使用相互链接的对象链表但不维护外部head
,那么我会执行以下操作......
// event.cpp
event::event() {
head = NULL;
}
event::event(int date, string name): date(date), name(name) {
head = NULL;
}
event::event(event *prev, int date, string name): date(date), name(name) {
if (prev->head != NULL) {
this->head = prev->head;
} else {
prev->head = this->head = prev;
}
prev->nxt = this;
this->nxt = NULL;
}
使用此方法的示例如下:
event *tailEvent = new event(1, 'first');
event *nextEvent = new event(tailEvent, 2, 'second');
event *thirdEvent = new event(nextEvent, 3, 'third');
...
tailEvent = lastEvent;
等等等等。因此,tailEvent->head
将始终指向第一个创建的事件,tailEvent->nxt
将在列表中跟随。
但。。。这很容易出错,所以我建议将列表本身保留在外面,如果可能的话,使用 STL。有关示例,请参阅学习C++:示例链表。
编辑:
更好的方法:-
class Event {
private:
Event *next;
int date;
string name;
public:
Event() {};
Event(int date, string name) : date(date), name(name) {};
setNext(Event *next) { this->next = next; };
int date() { return date; };
string name() { return name; };
Event *next() { return next; };
};
class EventList {
private:
Event *head;
public:
EventList() { head = NULL };
void add(int date, string name);
Event *head() { return head; }
}
void EventList::add(int date, string name) {
Event *newEvent = new Event(date, name);
newEvent->setNext(NULL);
Event *tmp = head;
if (tmp != NULL) {
while (tmp->next() != NULL) tmp = tmp->next();
tmp->setNext(newEvent);
} else {
head = newEvent;
}
}
列表需要一些控制代码。列表项无法控制自身。
我建议您使用容器 std::list 来实现所有列表操作。
如果要实现列表,则应创建控制类,例如EventContainer并实现插入/删除和搜索操作。
更好的方法是在这里有两个类:一个用于存储每个事件,另一个用于管理和存储有关列表的信息。
您的列表中将有许多事件类。将只有一个列表类。
现在,您的事件类实际上需要一些帮助程序方法,例如下一个和上一个指针。您可以直接实现它们,也可以创建继承自事件类或使其包含事件类的第三个类。
但无论哪种方式,管理列表的类都应该只需要一个实例。在这种情况下,头部可以初始化为 null,并将根据需要进行更新。
相关文章:
- 反向给定链表中的K节点
- 如果没有malloc,链表实现将失败
- 文本文件中的单词链表
- 努力将整数转换为链表。不知道我在这里做错了什么
- 链表,反向函数,数据结构
- 使用std::list创建循环链表
- 链表的泛型函数remove()与成员函数remove)
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 我们可以删除链表中静态内存中的节点吗
- C++,指针数组,指向双链表中的条目
- 链表中写入访问冲突的未知原因
- 如何修复链表类实现的未处理异常0xDDDDDDDD
- 打印所有链表的元素 (C++)
- 错误:需要类名(链表c++)
- 为什么C中的通用链表中存储的数据已损坏
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 链表c++插入,所有情况都已检查,但没有任何工作
- OOP,使用类的链表
- 链表反向函数OOP C++
- c++ - OOP实现链表,我不知道为什么添加到末尾不适合我,请建议