Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049

STL очередь

26.03.2013, 00:12. Показов 3679. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Изучаю STL и решил сделать класс для работы с очередью, и получилось что-то вроде этого... сильно не кричите, только начал изучать

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
// obr.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <queue>
#include <algorithm>
#include <locale>
using namespace std;
 
template <typename T>
class QueueNode
{
    private:
        queue<T> coll;
 
    public:
        QueueNode()
        {
            ;
        }
 
        void addToBack(const T value);
        void delQueue();
        void showQueue();
};
 
template <typename T>
void QueueNode<T>::addToBack(const T value)     
{
    coll.push(value);
}
 
template <typename T>
void QueueNode<T>::delQueue()
{
    coll.pop();
}
 
template <typename T>
void QueueNode<T>::showQueue()
{
    if(!coll.empty())
    {
        for(unsigned i = 0; i < coll.size(); ++i)
        {
            cout << coll.front() << ' ';
            coll.push(coll.front());
            coll.pop();
        }
    }
    else
        wcout << L"Очередь пустa!\n";
}
 
void instructions();
void menu();
 
int _tmain(int argc, _TCHAR* argv[])
{
    wcout.imbue(locale(".866"));
    wcin.imbue(locale(".866"));
 
    menu();
 
    cout << "\n\n";
    return 0;
}
 
void instructions()
{
    wcout << L"Выберите пункт меню: " <<
        L"\n1 - Добавить элемент в начало" <<
        L"\n2 - Удалить элемент из начала" <<
        L"\n3 - Выход.\n";
}
 
void menu()
{
    QueueNode<int> Universal;
    int punkt_menu, value;
 
    instructions();
 
 
    do{
        wcout << L"\n? ";
            cin >> punkt_menu;
 
            switch(punkt_menu)
            {
                case 1:
                    wcout << L"Введите число: ";
                        cin >> value;
 
                    Universal.addToBack(value);
                    Universal.showQueue();
                    break;
                case 2:
                    Universal.delQueue();
                    Universal.showQueue();
                    break;
            }
 
    }while(punkt_menu != 3);
}
Так вот, меня интересует функция вывода, я сначала хотел реализовать ее через
C++
1
for_each
, но у меня не получилось, вот хотел узнать, может кто предложит вариант Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.03.2013, 00:12
Ответы с готовыми решениями:

Очередь (сделать очередь, чтобы добавляло, удаляло, читало. Не STL.)
Помогите пожалуйста написать очередь. Есть Температура double и ее тип int ну и нужно сделать очередь, чтобы добавляло, удаляло, читало....

STL, очередь с приоритетом
у меня есть очередь с приоритетом, есть функции ввода и вывода в функции MinE после того как я нашел минимальный элемент, мне нужно...

Очередь на основе STL
Народ, помогите пожалуйста! Я сейчас прохожу стеки, очереди и деки на основе STL. Плохо шарю во всех этих стеках, поэтому попросил у друга...

5
...
 Аватар для anmartex
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
26.03.2013, 04:38
for_each работает через итераторы. У контейнера queue итераторов нет. Для таких целей лучше использовать список list.
1
26.03.2013, 05:43

Не по теме:

Смысла работы не понял. Взяли std::queue, обернули в свой класс и все программирование свелось к пробрасыванию своих методов к методам std::queue.

1
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
26.03.2013, 08:35  [ТС]
anmartex, а есть ли возможность использовать какой-либо алгоритм для вывода очереди?

Добавлено через 50 секунд
0x10, это скорее для практики, конечно можно было сделать просто несколько функций, но решил через класс сделать.
0
...
 Аватар для anmartex
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
26.03.2013, 09:22
Цитата Сообщение от yoghurt92 Посмотреть сообщение
а есть ли возможность использовать какой-либо алгоритм для вывода очереди?
Для queue? Имея на борту только методы:
Code
1
2
3
4
5
6
empty
size
front
back
push
pop
сложно, что-то ещё придумать. Плюс сама идеология очереди не позволяет выполнять над ней какие-либо манипуляции позволяющие пробежаться по элементам, кроме как выдавливать элемент из начала очереди и вставлять его обратно в конец (т.е. тот самый механизм, который реализован у вас).

P.S.: Повторюсь: для таких целей используйте контейнер list

Добавлено через 27 минут
Вот, на просторах интернета нарыл обёртку адаптер:
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
#include <queue>
#include <iostream>
 
template <class Container>
class Adapter : public Container
{
   public:
      typedef typename Container::container_type container_type;
      container_type& get_container()
      {
         return this->c;
      }
};
 
int main()
{
   typedef std::queue<int> C;
   typedef Adapter<C> Container;
 
   Container adapter;
 
   for (int i = 0; i < 10; ++i)
   {
      adapter.push(i);
   }
 
   Container::container_type& c = adapter.get_container();
   for (Container::container_type::iterator it = c.begin(); it != c.end(); ++it)
   {
      std::cout << *it << " ";
   }
 
   return 0;
}
Идея заключается в том, чтобы получить доступ к защищённому полю c, который в свою очередь является контейнером deque или list. А здесь уже есть итераторы . Хотя на мой взгляд это ещё тот огород, и лучше отвёртку использовать для болтов, а молоток для гвоздей.
1
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
26.03.2013, 14:41  [ТС]
anmartex, спасибо вам
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.03.2013, 14:41
Помогаю со студенческими работами здесь

Очередь с приоритетом из STL
Объясните зачем при объявлении priority_queue в качестве шаблона указывают вектор ? В чем разница между : priority_queue &lt;string&gt;...

Библиотека STL: очередь с приоритетом
Пытаюсь реализовать очередь с приоритетом, два класса ВИП- персона и простая персона. для этого создал два класса и запихнул потом обьекты...

Создать stl очередь, заполнить ее случайным образом и отсортировать
вопрос в заголовке, заранее спасибо.

Как загнать в STL очередь объекты другого класса с приоритетом?
В общем есть класс class Clientсo { char first_name; char last_name; bool sex; int age; int ID;

Создать контейнер по типу очередь, состоящий из символов (библиотека STL)
Ребят, помогите пожалуйста решить задачу : Создать контейнер по типу очередь, состоящий из символов. Данные в очередь ввести с клавиатуры....


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru