我有一个模板linkedList,我想为...动态创建“head”指针。
我似乎无法使用任何语法..我最好的猜测是:
linkedList<int>** ptr;
ptr = new (linkedList<int>*)[1];
但它不起作用。我对C ++很新,所以任何帮助都表示赞赏!谢谢!
答案 0 :(得分:3)
要获得指针,请执行:
T* ptr = new T;
其中T
是您的类型
对于指针指针,请执行:
T** ptrptr = new T*;
为一个指针分配空间,仍然需要像第一个方法一样填充:
*ptrptr = new T;
现在你有了一个有效的指针指针。
答案 1 :(得分:1)
你有没有使用std :: list的原因? (或std :: forward_list)
查看std :: list或最近的C ++书籍的头文件,或者实际上 cppreference.com
您的链接列表类模板应具有返回列表头部的功能。在编译器的c ++库中查看std :: list :: begin()。 std :: list :: iterator类型是指向列表中任何内容的指针。 (即T *)
答案 2 :(得分:1)
虽然我不确定你的链接真的需要指针数组
对于just new
构造,将编译以下表单。
ptr = new (linkedList<int>*[1]);
修改强>:
这会分配指针数组:
linkedList<int>** ptr = new (linkedList<int>*[1]);
这会分配数组:
linkedList<int>* ptr = new linkedList<int>[1];
这会分配一个元素:
linkedList<int>* ptr = new linkedList<int>;
答案 3 :(得分:0)
通常,链表的头部看起来像是:
node<int> *head = NULL;
如果要创建和插入节点,可以使用以下内容:
insert(node<int> *&list, int value) {
// insert new node containing `value` at head of `list`.
node<int> *temp = new node(value);
temp->next = list;
list=temp;
}
您可以使用以下内容:
node<int> *list = NULL;
for (int i=0; i<10; i++)
insert(list, i);
当然,除非这是家庭作业(或该订单上的某些内容),否则您应该立即停止工作,只需std::list
(或boost::slist
,如果您想要单链表)。
编辑:我在评论中添加了OP提到的更多细节。目前,avl_tree::insert
不会尝试保持平衡。它只是一个简单的非平衡插入,但它应足以证明我们目前关心的内容。
template <class T>
struct linked_list {
node *head;
void insert(T v) {
node<T> *n = new node(v, head);
head = n;
}
linked_list() : head(NULL) {}
template <class T>
struct node {
node *next;
T data;
node(T const &v, node *n=NULL) : data(v), next(n) {}
};
};
template <class keyType, class dataType>
class avl_tree {
struct node {
node *left, *right;
char balance;
keyType key;
dataType data;
node(keyType const &k, dataType const &d)
: left(NULL), right(NULL), balance(0), key(k), data(d)
{ }
bool operator<(node const &other) {
return key < other.key;
}
} *root;
bool insert(node const *new_node, node *&tree) {
if (tree == NULL) {
tree = new_node;
return true;
}
else if (*new_node < *tree)
return insert(new_node, tree->left);
else if (*new_node > *tree)
return insert(new_node, tree->right);
else // new_node == tree
return false; // couldn't insert -- already present.
}
public:
avl_tree() : root(NULL) {}
void insert(keyType const &key, dataType const &data) {
node *temp = new node(key, data);
insert(temp, root);
}
};