任务:创建类——双向链表,创建构造函数、析构函数。使用列表的方法:添加、删除元素、排序列表、在其中搜索。
我勾勒了一个小类结构,我对C ++几乎不熟悉,也许有更正确的实现方式。
直接在构造函数中输入数据是否正确?或者您是否需要为此创建一个私有方法并调用它?
struct tList
{
int key;
tList * prev;
tList * next;
};
class List
{
private:
tList * beginList;
tList * endList;
tList* getElement(void){
//выделение памяти
//заполнение данных в структуре
}
public:
List(){
//ввод данных в список
//вызов addElement
}
void addElementEnd(){
//вызов getElement
//добавление элемента в конец списка
}
void addElementBegin(){
//вызов getElement
//добавление элемента в начало списка
}
void deleteElement(tList * element){
// удаление элемента
}
void sortAsc(){
// по возростанию
}
void sortDesc(){
// по убыванию
}
tList* searchElement(int key){
//поиск элемента
}
void printList(){
//печать списка
}
~List(){
//освобождение памяти
}
};
对于初学者来说,最好将结构设为
tList
类的内部结构List
,因为它是列表的实现细节。该类必须具有默认构造函数,以便可以创建空列表。
您还可以创建一个构造函数,它接受一个初始化列表
std::initializer_list<int>
并立即从该初始化列表的元素中形成一个列表。在这种情况下,您可以同时使用addElementEnd
将元素添加到列表末尾的公共函数,以及在构造函数主体中单独编写的私有类函数,前提是与公共类函数相比,其编写效率更高.至于指定数组及其长度作为构造函数的参数,这取决于您。在一般情况下,用户自己可以在循环中逐个元素地向已创建的列表中添加新元素。他们也可以将任何其他容器中的项目添加到列表中。为什么不为每个用作列表元素源的容器编写一个单独的列表构造函数?
标准容器的 C++ 标准定义了这样一个构造函数。这是一个带有两个迭代器的构造函数(第三个参数有一个默认参数)。但这是一个模板构造函数。这是它的样子
如果你不想处理模板,你可以写一个类似的构造函数,它有两个指针:指向数组的开头和数组最后一个元素之后的位置。也就是说,它看起来像是针对 type 的特定迭代器的标准模板构造函数的特化
const int *
。或者如你最初所说
在所有其他情况下,除了复制列表之外,类的用户必须使用类的公共接口向类添加新元素。
是的,当然,您可以甚至需要根据使用类对象的场景建议的那样创建尽可能多的构造函数。除非你的列表有一些特殊的功能。
一般来说,在实施任何容器时,我建议您主要以标准 STL 模板库的设计决策为指导。
尽管如此,作为一个题外话,
getElement
不是一个好名字,最好命名为createElement
ormakeElement
。它只get
涉及访问一个已经存在的对象。