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

как удалить все елементы с очереди queue - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 5.00
Jumper19
 Аватар для Jumper19
13 / 13 / 0
Регистрация: 27.12.2010
Сообщений: 83
12.09.2011, 19:10     как удалить все елементы с очереди queue #1
Есть очередь queue и в ней элементы, как удалить их все чтобы очередь осталась пустой?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
12.09.2011, 19:12     как удалить все елементы с очереди queue #2
C++
1
2
3
std::queue<int> qu;
while ( !qu.empty() )
  qu.pop();
Так как-то.
Jumper19
 Аватар для Jumper19
13 / 13 / 0
Регистрация: 27.12.2010
Сообщений: 83
12.09.2011, 19:14  [ТС]     как удалить все елементы с очереди queue #3
попробуем...
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.09.2011, 19:17     как удалить все елементы с очереди queue #4
C++
1
2
while (!my_queue.empty())
    my_queue.pop();
Добавлено через 2 минуты
Опередили меня... Тогда как вариант
C++
1
2
3
std::queue< int > q;
//.....
q.swap(std::queue< int >());
Jumper19
 Аватар для Jumper19
13 / 13 / 0
Регистрация: 27.12.2010
Сообщений: 83
12.09.2011, 19:37  [ТС]     как удалить все елементы с очереди queue #5
а теперь как найти в это очереди максимальный элемент? кто-нить знает?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.09.2011, 19:46     как удалить все елементы с очереди queue #6
Вообще очередь для таких целей не предназначена, но если очень хочется, то:
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
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
 
typedef int type;
 
int main()
{
    std::queue< type > q;
 
    std::cout << "Enter queue elements: ";
 
    type elem;
 
    while (std::cin >> elem)
        q.push(elem);
 
    std::vector< type > q_copy_vec(q.size());
    std::queue< type > q_copy(q);
 
    for (size_t i = 0; i < q.size(); ++i)
    {
        q_copy_vec.push_back(q_copy.front());
        q_copy.pop();
    }
 
    if (!q.empty())
        std::cout << "Max element in q: " << *std::max_element(q_copy_vec.begin(), q_copy_vec.end()) << std::endl;
 
    return 0;
}
Jumper19
 Аватар для Jumper19
13 / 13 / 0
Регистрация: 27.12.2010
Сообщений: 83
12.09.2011, 20:22  [ТС]     как удалить все елементы с очереди queue #7
спасибо

Добавлено через 8 минут
Блин, и последняя сложность!
У нас есть очередь с числами:
1921
125
321
Я нахожу максимальный элемент в этой очереди и вывожу его! НО! Мне нужно чтобы теперь этот максимальный элемент правильно удалился с очереди! Ну чтобы после того как я его вывел на экран дальше очередь стала вот такой:
125
321
Потом максимальный выводиться 321 и удаляется!
Остается:
125
И после того как вывели последний то сделать чтобы очередь осталась пуста! Ну чтобы она определялась:
C++
1
q.empty()
Добавлено через 14 минут
кароче, можно немного не так:
нашел другой способ решения моей задачи!
Кароче, записывать элементы нужно сразу по порядку! Ну чтобы в очереди они хранились по возрастанию...
Например вводят:
7, 3, 6!
А в очереди храниться 3, 6, 7.
Как это реализовать, если так получиться сделать то ненужно искать теперь максимальный и удалять его!
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.09.2011, 21:34     как удалить все елементы с очереди queue #8
Записать элементы в массив, отсортировать по убыванию и с первого элемента начать запихивать элементы массива в очередь.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
12.09.2011, 21:48     как удалить все елементы с очереди queue #9
если вспомнить что std::queue это адаптер , то можно сделать такое решение поиска максимального элемента
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
#include <iostream>
#include <queue>
#include <cstdlib>
#include <cstdio>
#include <iterator>
#include <ctime>
#include <algorithm>
 
int main()
{
    std::srand(static_cast<unsigned int>(std::time(NULL)));
    std::queue<int> queue;
 
    const std::queue<int>::size_type size_queue = 10;
    const std::queue<int>::value_type max_value = 100;
 
    for (int i = 0; i < size_queue; ++i)
        queue.push(std::rand() % max_value);
 
    std::queue<int>::container_type container = queue._Get_container();
    std::cout << "Queue: " << std::endl;
    std::copy(container.cbegin(), container.cend(), std::ostream_iterator<std::queue<int>::value_type>(std::cout, " "));
    std::queue<int>::value_type max_el = *std::max_element(container.cbegin(), container.cend());
    std::cout << std::endl << "Max element: " << max_el << std::endl;
 
    std::getchar();
    return EXIT_SUCCESS;
}
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
12.09.2011, 22:07     как удалить все елементы с очереди queue #10
Цитата Сообщение от silent_1991 Посмотреть сообщение
Опередили меня... Тогда как вариант
std::queue< int > q;
//.....
q.swap(std::queue< int >());
что-то мне подсказывает, что это не рабочий код.

C++
1
2
3
4
5
template <typename T>
void any_clear(T &val) {
    T tmp;
    std::swap(tmp, val);
}
C++
1
2
3
4
5
6
7
    std::queue<int> q;
    q.push(10);
    q.push(11);
    q.push(12);
    cout << q.size() << "\n";
    any_clear(q);
    cout << q.size() << "\n";
3
0
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
12.09.2011, 22:12     как удалить все елементы с очереди queue #11
сам привел док-во что все норм
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
12.09.2011, 22:15     как удалить все елементы с очереди queue #12
Цитата Сообщение от sandye51 Посмотреть сообщение
сам привел док-во что все норм
где норм?
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
12.09.2011, 22:18     как удалить все елементы с очереди queue #13
то, что размер 0. Или это уже не является необходимым и достаточным условием пустой очереди?
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
12.09.2011, 22:19     как удалить все елементы с очереди queue #14
Цитата Сообщение от sandye51 Посмотреть сообщение
то, что размер 0. Или это уже не является необходимым и достаточным условием пустой очереди?
а ты смотрел, что было предложено и как было реализовано на самом деле?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.09.2011, 22:24     как удалить все елементы с очереди queue #15
villu, и что, то, что в результате после функции очистки в очереди осталось 0 элементов, должно меня убедить, что код не рабочий?
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
12.09.2011, 22:27     как удалить все елементы с очереди queue #16
Ну вообще-то там заменено использование
C++
1
a.swap(b);
на
C++
1
std::swap(a, b);
я вот тоже засомневался, есть ли у queue функция swap. Но проверять было лень. И сейчас лень
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
12.09.2011, 22:29     как удалить все елементы с очереди queue #17
Цитата Сообщение от silent_1991 Посмотреть сообщение
villu, и что, то, что в результате после функции очистки в очереди осталось 0 элементов, должно меня убедить, что код не рабочий?
ты пробовал свой код откомпилить? просто хотяб откомпилить?

Цитата Сообщение от silent_1991 Посмотреть сообщение
что код не рабочий?
мой - рабочий.

Добавлено через 32 секунды
Цитата Сообщение от grizlik78 Посмотреть сообщение
я вот тоже засомневался, есть ли у queue функция swap.
Вот! это первая ошибка из двух.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
12.09.2011, 22:29     как удалить все елементы с очереди queue #18
Цитата Сообщение от grizlik78 Посмотреть сообщение
есть ли у queue функция swap
C++
1
2
3
4
    void swap(_Myt&& _Right)
        {   // exchange contents with movable _Right
        c.swap(_STD move(_Right.c));
        }
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.09.2011, 22:30     как удалить все елементы с очереди queue #19
Пруф.
Миниатюры
как удалить все елементы с очереди queue  
Изображения
 
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2011, 22:33     как удалить все елементы с очереди queue
Еще ссылки по теме:

Удалить из очереди все отрицательные числа C++
Удалить из списка целых чисел все парные елементы, посчитав их количество C++
C++ Использование очереди (queue) одного класса в другом

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

Или воспользуйтесь поиском по форуму:
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
12.09.2011, 22:33     как удалить все елементы с очереди queue #20
C++
1
    std::swap(std::queue<int>(), val);
error: in passing argument 1 of ‘void std::swap(_Tp&, _Tp&) [with _Tp = std::queue<int>]’
Yandex
Объявления
12.09.2011, 22:33     как удалить все елементы с очереди queue
Ответ Создать тему
Опции темы

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