0 / 0 / 0
Регистрация: 07.11.2018
Сообщений: 36
1

Добавление элементов в очередь в цикле

10.11.2019, 19:06. Показов 336. Ответов 2
Метки c++ (Все метки)

Реализовал очередь чернз массив. Хочу в цыкле ввести значения элементов очереди, но похоже что-то не так с
C++
1
istream& operator>>(istream& is, Queue& obj)
Полный код:

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
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip> 
using namespace std;
 
class Queue {
private:
    int front, rear, capacity;
    int* queue;
public:
    Queue(int c = 0) {
        front = rear = 0;
        capacity = c;
        queue = new int[capacity];
        for (int i = 0; i < c; i++)
            queue[i] = 0;
    }
    ~Queue() { if (queue != nullptr)delete[] queue; };
 
    void CheckCapacity();
    Queue& operator++ (int);
    friend Queue& operator-- (Queue&, int);
    friend istream& operator>> (istream&, Queue&);
    friend ostream& operator<< (ostream&, Queue&);
    friend void operator! (Queue&);
 
};
 
void Queue::CheckCapacity() {
    if (capacity == rear) {
        exit(-1);
    }
}
Queue& Queue::operator++ (int) {
    static int x = 0;
    CheckCapacity();
    queue[rear++] = ++x;
    return *this;
}
Queue& operator-- (Queue& obj, int) {
    !obj;
    for (int i = 0; i < obj.rear - 1; i++) {
        obj.queue[i] = obj.queue[i + 1];
    }
    obj.rear--;
    return obj;
}
istream& operator>>(istream& is, Queue& obj) {
    cout << endl;
    for (int i = obj.front; i < obj.capacity; i++) {
        if (obj.queue[obj.front + 1] == NULL) {
            cout << endl << "Введiть" << setw(2) << i + 1 << "-ий елемент: ";
            is >> obj.queue[obj.front++];
        }
        else continue;
    }
    cout << endl;
    return is;
}
ostream& operator<<(ostream& os, Queue& obj) {
    !obj;
    cout << endl;
    for (int i = obj.front; i < obj.rear; i++) {
        os << obj.queue[i] << setw(3);
    }
    cout << endl;
    return os;
}
void operator! (Queue& obj) {
    if (obj.front == obj.rear) {
        exit(-2);
    }
    else cout << endl << "Queue is not empty" << endl;
}
 
int main() {
    setlocale(LC_ALL, "Ukrainian");
    Queue q(5);
    q++;
    q++;
    q++;
    q++;
    cout << q;
    q--;
    cout << q;
    cin >> q;
    cout << q;
    system("pause");
    return 0;
}
Добавлено через 17 минут
Update: уже решил. Поменял вот это:

C++
1
2
3
4
if (obj.queue[obj.rear + 1] == NULL) {
            cout << endl << "Введiть" << setw(2) << obj.rear + 1 << "-ий елемент: ";
            is >> obj.queue[obj.rear++];
        }
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.11.2019, 19:06
Ответы с готовыми решениями:

Добавление элементов в очередь
Помогите реализовать добавление элементов в структуру-очередь (что бы добавить новый элемент нужно...

Очередь добавление / удаление элементов
#include &lt;iostream&gt; using namespace std; struct nod{ string nr; nod *leg; };...

Реализовать добавление элементов в очередь
Помогите сделать,кто знает: Создать очередь случайных чисел. Реализовать добавление элементов в...

Очередь добавление / удаление элементов
#include &lt;iostream&gt; using namespace std; struct nod{ string nr; nod *leg; };...

2
Модератор
Эксперт С++
11482 / 9400 / 5649
Регистрация: 18.12.2011
Сообщений: 25,113
10.11.2019, 19:12 2
Цитата Сообщение от Llor1s Посмотреть сообщение
istream& operator>>(istream& is, Queue& obj) {
cout << endl;
Какое отношение имеет поток is к потоку cout?
is может быть потоком из файла, а cout может не существовать (например, если создается Windows приложение).
1
0 / 0 / 0
Регистрация: 07.11.2018
Сообщений: 36
10.11.2019, 20:48  [ТС] 3
zss, убрал, спасибо. Можете еще глянуть, может где в программе есть недочеты.

Добавлено через 32 минуты
zss, можете еще подсказать, в этом цикле
C++
1
for (int i = obj.front; i < obj.capacity; i++)
C++
1
obj.capacity
включительно или невключительно ?

C++
1
for (int i = obj.front; i < obj.capacity; i++)
И правильно ли то, что когда я удаляю элемент, номер которого в очереди равен 0 (то есть первый), из очереди
C++
1
Queue q(7)
через
C++
1
operator--
, то в
C++
1
cin >> q
меня просять ввести элементы 4 и 5 (пятый и шестой) ? Разве не я не должен ввести еще и 6 (седьмой) ?

Добавлено через 39 минут
Второе исправил, осталось:

Цитата Сообщение от Llor1s Посмотреть сообщение
zss, можете еще подсказать, в этом цикле
C++Выделить код
1
for (int i = obj.front; i < obj.capacity; i++)
C++Выделить код
1
obj.capacity
включительно или невключительно ?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2019, 20:48

Изменить удаление и добавление элементов в очередь по правилу FIFO.
Необходимо изменить удаление и добавление элементов в очередь (функции push и pop), по правилу...

Std::map insert in while - добавление новых элементов в цикле
Задача - обьявить мапу, обьявить цикл и в цикле сначало проверять(если оно есть) содержимое мапы а...

Сформировать односвязную очередь из элементов, которые входят в очередь Q1, но не входят в очередь Q2
Составить программу обработки динамической структуры данных: сформировать односвязную очередь Q из...

Добавление элементов в очередь и вывод на экран
Помогите реализовать простенькую программку из паскаля в delphi. А то я слаб в нём... Мне самое...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru