c++ - 使用模板实现双端队列的问题

标签 c++ templates

最近我尝试使用模板实现续集。这是结果

#pragma once
#include <iostream>
using namespace std;

template<typename Type>
struct Node {
    Node();
    Node<Type>* next = NULL;
    Node<Type>* prev = NULL;
    Type data;
};

template<typename Type>
class deque{
 private:
     Node<Type>* front = NULL;
     Node<Type>* back = NULL;

 public:
     deque(Type key);
     ~deque();
     Node<Type>* back();
     Node<Type>* front();
     int size();
     bool empty();
     void push_front(Type key);
     void push_back(Type key);
     void pop_front();
     void pop_back();
     void print_in_order();
};


 template<typename Type>
  deque<Type>::deque(Type key)
{
     if (front != NULL || back != NULL)
         return
     else
     {
         front = new Node<Type>();
         front->data = key;
         prev = front;
     }
}

 template<typename Type>
  deque<Type>::~deque()
{
     Node<Type>* delPtr;
     while (front->prev != NULL)
    {
         delPtr = front;
         cout << "Deleted " << front->data<<endl;
         front = front->prev;
         delete delPtr;

    }
     back = NULL;
     delete front;
}

 template<typename Type>
  Node<Type>* deque<Type>::back()
{
      if(back!= NULL)
         return back;
     else 
          return NULL
}

 template<class Type>
  Node<Type>* deque<Type>::front()
{
     return front;
}

 template<typename Type>
  int deque<Type>::size()
{
     int counter = 0;
     Node<Type>* temp = front;
     while (temp->back != NULL)
    {
         counter++;
         temp = temp->back;
    }
     return counter;
}

 template<typename Type>
  bool deque<Type>::empty()
{
     if (front == NULL && back == NULL)
         return true;
     else
         return false;
}

 template<typename Type>
  void deque<Type>::push_front(Type key)
{
     Node<Type>* temp = new Node<Type>();
     temp->data = key;
     temp->prev = front;
     front->next = temp;
     front = temp;
}

 template<typename Type>
  void deque<Type>::push_back(Type key)
{
     Node<Type>* temp = new Node<Type>();
     temp->data = key;
     temp->next = back;
     back->prev = temp;
     back = temp;
}

 template<typename Type>
 inline void deque<Type>::pop_front()
{
     if (front != NULL) {
         Node<Type>* delPtr = front;
         front = front->prev;
         front->next = NULL;
         delete delPtr;
    }
     else
         cout << "There is no front in empty deque" << endl;
}

 template<typename Type>
  void deque<Type>::pop_back()
{
     if (back != NULL) {
         Node<Type>* delPtr = back;
         back = back->next;
         back->prev = NULL;
         delete delPtr;
    }
     else
         cout << "There is no back in empty deque " << endl;
}

 template<typename Type>
  void deque<Type>::print_in_order()
{
     if (front == NULL)
         return;
     Node<Type> temp = front;
     while (temp->prev != NULL) {
         cout << temp->data << " ";
         temp = temp->prev;
    }
     cout << endl;
}

 template<typename Type>
 inline Node<Type>::Node()
{
}

然后是一些代码来检查它是否工作

int main(){
    deque<int> qq(1);
    qq.push_front(2);
    qq.push_front(3);
    qq.print_in_order();
    return 0;
}

这段代码不想编译。我曾尝试寻找类似的项目或错误,但找不到任何有用的东西。因此,如果有人可以解释出了什么问题,那就太好了。 大多数错误都是相同的。例如,不允许使用 back()front(),因为它们不是函数,也不是静态成员。或者 back()front() 作为类模板的成员不能接收函数类型。希望有人能帮忙。

最佳答案

有冲突

Node<Type>* front = NULL;
Node<Type>* back = NULL;

Node<Type>* back();
Node<Type>* front();

所以首先改变Node<Type>* front = NULL;Node<Type>* m_front = NULL;back一样.您的代码还有其他错误,例如

Node<Type> temp = front;

必须是

Node<Type>* temp = front;

终于可以在ideone上看到没有编译错误的代码了

祝你好运!

关于c++ - 使用模板实现双端队列的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47612706/

相关文章:

c++ - 从函数模板参数中推导复杂类型

c++ - boost 错误 : reference to 'detail' is ambiguous

c++ - 模板类的对象创建包装器

c++ - 将数据从较小的 vector 复制到较大的 vector

c++ - 我可以删除 [] 指向已分配数组的指针,但不指向它的开头吗?

c++ - 输入层类型 : ImageData in windows caffe cpp giving Blank Output

c++ - 具有 constexpr 函数的模板作为参数返回

java - 配置速度以使用 toString 以外的东西渲染对象?

c++ - 专用 vector 模板的大括号初始化

c++ - 编写自定义 c++14 风格的类型别名