我试图实现一个insertfront()函数为我的单列表deque,但我一直遇到这个相同的问题。
我认为这是由于操作符=
的重载。 Deque& operator=(const Deque&){return *this;};
对于赋值工作,它要求操作数A是Deque类型的引用,操作数B是Deque类型的另一个引用,但我不确定如何去实现这一点,因为我试图做head&= new_node&而且会犯更多的错误。
Deque.cpp||In member function 'void Deque::insert_front(int)':|
Deque.cpp|21|error: use of deleted function 'std::unique_ptr<_Tp, _Dp>& std::unique_ptr<_Tp, _Dp>::operator=(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = Node; _Dp = std::default_delete<Node>]'|
/usr/include/c++/6/bits/unique_ptr.h|357|note: declared here|
这是我的函数
#include "Deque.h"
#include <iostream>
#include <memory>
#include <utility>
using std::cout;
using std::endl;
using std::move;
void Deque::insert_front(int a)
{
std::unique_ptr<Node> new_node;
new_node->val = move(a);
new_node->next = move(head);
head = move (new_node);
}
Deque.h
#include "Node.h"
#include <memory>
class Deque{
public:
Deque() = default;
Deque(const Deque&);
~Deque(); //must use constant space
Deque& operator=(const Deque&){return *this;};
void insert_front(int);
private:
friend Node;
//Sentinel
std::unique_ptr<Node> head ;
std::unique_ptr<Node> tail ;
};
Node.h
#ifndef NODE_H
#define NODE_H
#include <iostream>
#include <memory>
class Node {
public:
Node(const Node& n) : val{n.val}, next{}
{
}
Node(int v, std::unique_ptr<Node> n) : val{v}, next{move(n)}
{
}
Node(int v) : val{v}
{
}
private:
int val = 0;
std::unique_ptr<Node> next = nullptr;
friend class Deque;
friend std::ostream& operator<<(std::ostream&, const Node&);
};
#endif
在insertAtFront函数中,基本上很容易,在创建节点后,我们必须检查列表是否为空,所以我们可以通过头节点检查,如果它是空的,那么节点是空的,否则不是。如果head不为空,则在新节点的下一个指针中分配第一个节点的地址。然后我们必须更新head,所以我们将新创建的节点地址分配给head。
#include<iostream>
using namespace std;
//Node structure
struct node{
int data;
node* next;
};
//This pointer will always point first node
node* head = NULL;
//Function to add node at the front of the linked list
void insert_at_front(){
node* t = new node;
cout << "Enter the data in the node :";
cin >> t->data;
t->next = NULL;
if(head == NULL){
head = t;
}
else{
//After adding the new node to the existing linked list
//then we have to modify the head pointer
t->next = head;
head = t;
}
numberOfNodes++;
}
}