Очередь, указатель, for_each

219
01 июля 2018, 09:10

Здраствуйте, есть класс очереди на основе односвязного списка, в случае, если find возвращает false или использования swap почему-то не выводятся элементы, подозреваю что проблема в указателях, но не уверен как вернуть их к начальному состоянию. Также, нужно написать метод for_each, но я слабо представляю как он должен быть реализован.

У меня завтра сдача курсовой, помогите пожалуйста.

#include "stdafx.h"
#include <iostream>
using namespace std;
template<class T>
class Queue 
{
struct node 
{
    T data;
    node* next;
};
private:
node* ptr;
public:
Queue() : ptr(NULL) {}
~Queue() 
{
    this->clear();
}
public:
int  size()
{
    int sz = 0;
    const node* iter = ptr->next;
    do
    {
        sz++;
        iter = iter->next;
    } while (iter != ptr->next);
    return sz;
}
bool empty()
{
    return (!ptr);
}
T& front()
{
    return ptr->next->data;
}
T& back()
{
    node* tmp = ptr;
    while (!tmp->next)
    {
        tmp = tmp->next;
    }
    return tmp->data;
}
void swap(Queue<T> q)
{
    while (this->ptr->next && q.ptr->next)
    {
        T tmp = this->ptr->data;
        this->ptr->data = q.ptr->data;
        q.ptr->data = tmp;
        this->ptr = this->ptr->next;
        q.ptr = q.ptr->next;
    }
}
void  push(T data) 
{
    node* e = new node();
    e->data = data;
    if (!ptr) 
    {
        ptr = e;
        ptr->next = ptr;
    }
    else 
    {
        e->next = ptr->next;
        ptr = ptr->next = e;
    }
}
void  pop() {
    if (ptr == ptr->next) 
    {
        delete ptr;
        ptr = NULL;
        return;
    }
    node* tmp = ptr->next;
    ptr->next = tmp->next;
    delete tmp;
    tmp = NULL;
}
bool find(T data)
{
    node* tmp = ptr;
    while (tmp->next)
    {
        if (data == tmp->data)
        {
            return true;
        }
        tmp = tmp->next;
    }
    return false;
}
void clear() 
{
    while (!this->empty())
        this->pop();
}
};
void main()
{
Queue<int> q, w;
for (int i = 1; i <= 6; i++)
{
    q.push(i * 100);
    w.push(i);
}
cout << "Queue size: " << q.size() << endl;
cout << q.back() << endl;
if (q.find(200))
{
    cout << "True" << endl;
}
else
{
    cout << "False" << endl;
}
q.swap(w);
while (!q.empty()) {
    cout << q.front() << endl;
    q.pop();
}
if (q.empty())
    cout << "queue NULL" << endl;
cin.get();
}
READ ALSO
класс set с++ не могу понять функцию count();

класс set с++ не могу понять функцию count();

Ищет в контейнере элементы, эквивалентные val, и возвращает количество совпадений

206
Удаление вершины с графа

Удаление вершины с графа

Как реализовать правильно функцию удаления вершины? Если возможно помогите кодом

184
Неявное подключение DLL С++ WINAPI

Неявное подключение DLL С++ WINAPI

Пару часов назад писал с вопросом о явном подключении и с горем пополам разобрался, спасибо всем, кто помогСейчас встал вопрос о неявном подключении...

186