Шаблон реализации возвращаемого типа в C ++ - PullRequest
2 голосов
/ 29 января 2020

Я пытаюсь реализовать Структура данных очереди, используя связанный список в C ++, где я использовал классы как в связанном списке, так и в очереди. Одна вещь, которую я не получаю, это то, что, например, я написал метод front(), который будет возвращать верхний элемент или первый элемент очереди. Тем не менее, я запутался в том, что я должен возвращать и как я должен возвращать в случае шаблонного класса, когда моя очередь пуста . Если бы это была очередь типа int, я бы просто вернул -1. Здесь я запутался, что я должен вернуть, если мой queue() уже пуст и как мне вернуться из шаблонного класса .

Вот код, который я написал

// Implementation of Queue Data Structure using List
#include<iostream>
using namespace std;

template<typename T>
class Node
{
public:
    T data;
    Node<T>*next;
};
template<typename S>
class Queue
{
public:
    Node<S>*q = NULL;
    void enqueue(S data){
        Node<S>* newNode = new Node<S>;
        newNode->data = data;
        newNode->next = NULL;
        if(q!=NULL){
            Node<S>* temp = q;
            while(temp->next!=NULL){    
                temp = temp->next;
            }
            temp->next = newNode;
        }
        else{
            q = newNode;
        }
    }
    void print(){ //Utility method for printing the queue with ease
        Node<S>*temp = q;
        while(temp){
            cout<<temp->data<<endl;
            temp = temp->next;
        }
    }
    auto dequeue() -> decltype(q->data){
        Node<S>*temp = q;
        q = q->next;
        S value = temp->data;
        delete temp;
        return value;
    }
    auto front() -> decltype(q->data){
        return q->data;
    }
};
int main()
{
    Queue<int>q;
    q.enqueue(1);
    q.enqueue(2);
    q.enqueue(3);

    cout<<"Front is "<<q.front()<<endl;

    cout<<"Before dequeue() printing\n";

    q.print(); 

    cout<<"Dequeue operation() "<<q.dequeue()<<endl;

    cout<<"After deueue() printing\n";

    q.print();

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...