Форум программистов, компьютерный форум CyberForum.ru

Функция удаления для очереди - C++

Восстановить пароль Регистрация
 
Block B
0 / 0 / 0
Регистрация: 07.11.2014
Сообщений: 16
12.06.2016, 21:15     Функция удаления для очереди #1
Как правильно будет здесь применить удаление... Подскажите пожалуйста

"IN.h"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <iostream>
#include<locale.h>
#include <cassert> 
 
template <class T>
class Queue
{
    T *queue; // массив (указатель на очередь)
    int ssize; // расзмер массива
    int top; // последний введеный
    T *pop; //первый введеный
    int elemCT; // счетчик элементов
public:
    //конструктор очеди с параметром - размером
    Queue(int size)
    {
        ssize = size;
        queue = new T[ssize];
        std :: cout << "Размер очереди = " << size << std :: endl;
        top = 0;
    }
    //Деструктор очереди
    ~Queue()
    {
        delete []queue;
    }
    //Ввод элемента
    void push(T a)
    {
        if(top < ssize)
        {
            queue[top++] = a;
        }
        else
        {
            cout << "Очередь заполненна" << endl << "" << endl;
            for(int i = 0; i < ssize; i++)
            {
                queue[i] = queue[i+1];
            }
            queue[ssize-1] = a;
        }
    }
 
    //Класс итератора
    class iterator_q
    {
        Queue& q; // указатель на элемент
        int index; // индекс элемента
    public:
        // конструктор итератора с одним параметром
        iterator_q(Queue& is) : q(is), index(0){}
        // конструктор с двумя параметрами
        iterator_q(Queue& is, bool) : q(is), index(q.top){}
        // проверка выхода в конец очереди
        bool operator == (const iterator_q& rv){return index == rv.index;}
        bool operator !=(const iterator_q& rv){return index !=rv.index;}
        // префксно Итерирует итератор на 1
        T operator ++()
        {
            if (index < q.top)
                return q.queue[++index];
            else
                cout << "Очередь заполненна";
        }
        // постфиксно итерирует на 1
        T operator++(int)
        {
            if (index < q.top)
                return q.queue[index++];
            else
                cout << "Очередь заполненна";
        }
        // перегружаем адресацию
        T& operator*() const
        {
            return q.queue[index];
        }
    };
    // Начало очереди
    iterator_q begin()
    {
        return iterator_q (*this);
    }
    // Конец очереди
    iterator_q end()
    {
        return iterator_q (*this,true);
    }
    //удаление
    iterator_q pop_front()
    {
        //delete iterator_q(*this);
         assert( top > 0 );
         queue[--top];
         //return;
    }
};
// Проверка на ввод числа
int check_int()
{
    int i, flag = 0;
    char ch[10];
    std :: cin >> i;
    flag = std :: cin.rdstate();
    if (flag& std :: ios :: failbit)
    {
        std :: cin.clear();
        std :: cin >> ch;
        throw 1;
    }
    return i;
}
"Source.cpp"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include "in.h"
#include<locale.h>
 
using namespace std;
void main()
{
    setlocale(LC_CTYPE, "");
    int flag = 0;
    int index_work, size;
    // Размер очереди
    do
    {
        try
        {
            flag = 0;
            cout << "Введите размер очереди: ";
            size = check_int(); // проверить вводимый символ
        }
        catch(int)
        {
            flag = 1;
            cout << "Ошибка!!! " << endl;
        }
    }
    while(flag == 1);
    Queue <int> queue_w(size); // создание очереди с заданным размером
    int o = 0;
    // Основной цикл
    while(true)
    {
        Queue<int> :: iterator_q start = queue_w.begin();
        cout << "1. Добавить элемент  " << endl
            << "2. Найти элемент " << endl 
            << "3. Удалить элемент из очереди" << endl
            << "4. Выход "<<endl;
        do
        {
            try
            {
                flag = 0;
                cout << "Выберете действие: ";
                index_work = check_int(); // проверить вводимый символ
            }
            catch(int)
            {
                flag = 1;
                cout << "Ошибка!!! " << endl;
            }
        }
        while(flag == 1);
        // ДОБАВЛЕНЕ
        if(index_work == 1)
        {
            int a;
            cout << "Добавить элемент " << endl;
            cout << "Введите элемент: " << endl;
            cin >> a;
            queue_w.push(a);
            Queue<int> :: iterator_q end = queue_w.end();
            cout << "Очередь: " << endl;
            while(start != end)
            {
                cout << "< " << *start << " >" << endl;
                start++;
            }
        }else
        {
            // ПОИСК
            if(index_work == 2)
            {
                cout << "Найти элемент " << endl;
                cout << "Введите элемент: ";
                int a, index_check = 0, index_stay;
                cin >> a;
                Queue<int> :: iterator_q end = queue_w.end();
                while(start != end)
                {
                    if(a == *start)
                    {
                        index_check++;
                        index_stay = (*start);
                    }
                    start++;
                }
                if(index_check > 0)
                    cout << "Заданный элемент" << a << " найден " << index_stay << endl;
            }else
            {
                // УДАЛЕНИЕ
                Queue<char> myQueue(14);
                if(index_work == 3)
                {
                    cout << "Удалить элемент " << endl;
                    myQueue.pop_front();
                }
                else
                {
                    if(index_work == 4)
                        break;
                }
            }
        }
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2016, 21:15     Функция удаления для очереди
Посмотрите здесь:

написать программу для удаления положительных элементов очереди C++
функция в си++ для удаления элемента C++
Функция для удаления слова из строки C++
Функция для удаления из массива простых чисел C++
C++ Функция для удаления элемента в двумерном динамическом массиве. В чем ошибка?
C++ Не могли бы объяснить, как работает эта функция для удаления цифр?
Освобождение памяти (функция удаления элемента Очереди) C++
Функция для удаления строки из двумерного массива C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 21:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru