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

STL, Queue (в очереди изменить один элемент на другой?) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
The1Phoenix
2 / 2 / 0
Регистрация: 28.03.2012
Сообщений: 76
16.12.2012, 18:03     STL, Queue (в очереди изменить один элемент на другой?) #1
Реально ли в очереди изменить один элемент на другой? Использовать другую очередь естественно разрешено и не одну, если да - подскажите как... С удалением элемента справился...А с изменением не могу, ибо он удаляет тот элемент, который мы заменяет и ставит замену в начало очереди.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2012, 18:03     STL, Queue (в очереди изменить один элемент на другой?)
Посмотрите здесь:

C++ как удалить все елементы с очереди queue
C++ Какой элемент останется в кольце последним, если начать по очереди удалять из списка каждый n элемент
C++ Скопировать один элемент в другой в рамках такого массива
queue удаление из очереди C++
Многопоточность. Почему в данном примере один элемент стека будет отброшен, а другой обработан дважды C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Somebody
2769 / 1582 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
16.12.2012, 19:44     STL, Queue (в очереди изменить один элемент на другой?) #2
Как ты вообще собираешься получить доступ к произвольному элементу очереди?
The1Phoenix
2 / 2 / 0
Регистрация: 28.03.2012
Сообщений: 76
16.12.2012, 21:32  [ТС]     STL, Queue (в очереди изменить один элемент на другой?) #3
Цитата Сообщение от Somebody Посмотреть сообщение
Как ты вообще собираешься получить доступ к произвольному элементу очереди?
Ну удаление по критерию вышло же.
Somebody
2769 / 1582 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
16.12.2012, 21:43     STL, Queue (в очереди изменить один элемент на другой?) #4
Можно перекидывать элементы из старой очереди в новую поэлементно; если текущий элемент соответствует заданному условию, то вместо него надо добавить другой.
The1Phoenix
2 / 2 / 0
Регистрация: 28.03.2012
Сообщений: 76
16.12.2012, 21:45  [ТС]     STL, Queue (в очереди изменить один элемент на другой?) #5
Цитата Сообщение от Somebody Посмотреть сообщение
Можно перекидывать элементы из старой очереди в новую поэлементно; если текущий элемент соответствует заданному условию, то вместо него надо добавить другой.
Пытался удаление подредактировать, но что-то не выходило... удалялся нужный элемента, а новый заносился в начало, не знаю почему, но в коде было логически всё верно... но кода уже нет)
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
16.12.2012, 22:29     STL, 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
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <queue>
 
template<typename T>
void Replace(T const& what, T const& replacement, std::queue<T>& queue)
{
    typename std::queue<T>::size_type queuesize = queue.size(), i;
    for(i = 0; i < queuesize; ++i)
    {
        if(queue.front() == what)
            queue.push(replacement);
        else
            queue.push(queue.front());
        queue.pop();
    }
}
 
template<typename T>
std::ostream& operator<<(std::ostream& ost, std::queue<T>& queue)
{
    typename std::queue<T>::size_type queuesize = queue.size(), i;
    for(i = 0; i < queuesize; ++i)
    {
        ost << queue.front() << std::endl;
        queue.push(queue.front());
        queue.pop();
    }
    return ost;
}
 
int main()
{
    std::queue<int> queue;
    queue.push(2);
    queue.push(33);
    queue.push(2);
    queue.push(55);
    queue.push(2);
    std::cout << queue << std::endl;
    Replace(2, 77, queue);
    std::cout << queue << std::endl;
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2012, 11:15     STL, Queue (в очереди изменить один элемент на другой?)
Еще ссылки по теме:

C++ Задания на стеки/очереди (без шаблонных классов stack, queue)
C++ Передача массива в stl::queue
C++ Использование очереди (queue) одного класса в другом

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

Или воспользуйтесь поиском по форуму:
Mr.X
Эксперт С++
 Аватар для Mr.X
2796 / 1572 / 246
Регистрация: 03.05.2010
Сообщений: 3,649
17.12.2012, 11:15     STL, Queue (в очереди изменить один элемент на другой?) #7
Цитата Сообщение от Somebody Посмотреть сообщение
Как ты вообще собираешься получить доступ к произвольному элементу очереди?
Ну, контейнер у очереди protected, а поэтому легко доступен:
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
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <deque>
#include <iostream>
#include <iterator>
#include <queue>
/////////////////////////////////////////////////////////////////////////////////////////
template<class  T>
class  T_queue_inheritor : public std::queue<T>
{
    typedef std::queue<T>                       T_base_queue;
    typedef typename T_base_queue::value_type   T_value_type;
public:
    //-----------------------------------------------------------------------------------
    T_queue_inheritor( const T_base_queue&  base_queue )
        :
        T_base_queue( base_queue )
    {}
    //-----------------------------------------------------------------------------------
    void  replace
            (
                const T_value_type&     old_value,
                const T_value_type&     new_value
            )
    {
        std::replace
            (
                c.begin     (),
                c.end       (),
                old_value,
                new_value
            );
    }
    //-----------------------------------------------------------------------------------
    void  print()
    {
        std::copy
            (
                c.begin                     (),
                c.end                       (),
                std::ostream_iterator<T>    (std::cout, "\t")
            );
 
        std::cout   <<  std::endl;
    }
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
template<class  T>
void  replace_in_queue
    ( 
        std::queue<T>&                      queue_obj,
        typename std::queue<T>::value_type  old_value,
        typename std::queue<T>::value_type  new_value
    )
{
    T_queue_inheritor<T>    queue_inheritor( queue_obj );
    queue_inheritor.replace
        (
            old_value,
            new_value
        );
 
    queue_obj.swap( queue_inheritor );
}
/////////////////////////////////////////////////////////////////////////////////////////
template<class  T>
void  print_queue( const std::queue<T>&  queue_obj )
{
    T_queue_inheritor<T>    queue_inheritor( queue_obj );
    queue_inheritor.print();
}
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::queue<int>     T_int_queue;
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    T_int_queue     int_queue;
    int_queue.push(1);
    int_queue.push(9);
    int_queue.push(4);
    int_queue.push(5);
 
    std::cout   <<  "Исходная очередь:"
                <<  std::endl;
 
    print_queue( int_queue );
 
    replace_in_queue
        (
            int_queue,
            5,
            6
        );
 
    std::cout   <<  std::endl
                <<  "Очередь после изменения:"
                <<  std::endl;
 
    print_queue( int_queue );
}
Yandex
Объявления
17.12.2012, 11:15     STL, Queue (в очереди изменить один элемент на другой?)
Ответ Создать тему
Опции темы

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