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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
#1

STL очередь - C++

26.03.2013, 00:12. Просмотров 935. Ответов 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
, но у меня не получилось, вот хотел узнать, может кто предложит вариант Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2013, 00:12     STL очередь
Посмотрите здесь:

C++ STL
C++ STL
Очередь на основе STL C++
Создать stl очередь, заполнить ее случайным образом и отсортировать C++
C++ STL
C++ Задача по STL (Создать объект-контейнер, очередь с приоритетом, заполнить ее данными, тип char)
C++ STL, очередь с приоритетом
Библиотека STL: очередь с приоритетом C++
Как загнать в STL очередь объекты другого класса с приоритетом? C++
Создать контейнер по типу очередь, состоящий из символов (библиотека STL) C++
C++ Очередь с приоритетом из STL
Реализовать пользовательские классы - дек, стек (LIFO), очередь (FIFO) на базе класса list библиотеки STL C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
1701 / 1194 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
26.03.2013, 04:38     STL очередь #2
for_each работает через итераторы. У контейнера queue итераторов нет. Для таких целей лучше использовать список list.
0x10
26.03.2013, 05:43
  #3

Не по теме:

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

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

Добавлено через 50 секунд
0x10, это скорее для практики, конечно можно было сделать просто несколько функций, но решил через класс сделать.
anmartex
...
1701 / 1194 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
26.03.2013, 09:22     STL очередь #5
Цитата Сообщение от yoghurt92 Посмотреть сообщение
а есть ли возможность использовать какой-либо алгоритм для вывода очереди?
Для queue? Имея на борту только методы:
Код
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. А здесь уже есть итераторы . Хотя на мой взгляд это ещё тот огород, и лучше отвёртку использовать для болтов, а молоток для гвоздей.
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
26.03.2013, 14:41  [ТС]     STL очередь #6
anmartex, спасибо вам
Yandex
Объявления
26.03.2013, 14:41     STL очередь
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru