Удаление элемента из std::queue
От: Аноним  
Дата: 10.02.04 10:16
Оценка:
Как удалить элемент из std::queue, если он не первый?
Re: Удаление элемента из std::queue
От: VNG Беларусь https://organicmaps.app/
Дата: 10.02.04 10:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как удалить элемент из std::queue, если он не первый?


Если Вам требуется удалять произволные элементы из контейнера, то лучше попробовать std::vector или std::list.
В принципе std::queue это не контейнер, а адаптер над контейнером (скорее всего над std::vector).
Re: Удаление элемента из std::queue
От: Lorenzo_LAMAS  
Дата: 10.02.04 10:26
Оценка:
Вытолкнуть все элемены, перед ним стоящие. А если серьезно, то queue для этого не предназначен. Используй что-то другое (deque, list например)
Of course, the code must be complete enough to compile and link.
Re[2]: Удаление элемента из std::queue
От: Аноним  
Дата: 10.02.04 10:27
Оценка:
Здравствуйте, VNG, Вы писали:

VNG>Здравствуйте, Аноним, Вы писали:


А>>Как удалить элемент из std::queue, если он не первый?


VNG>Если Вам требуется удалять произволные элементы из контейнера, то лучше попробовать std::vector или std::list.

VNG>В принципе std::queue это не контейнер, а адаптер над контейнером (скорее всего над std::vector).

Да, я это понимаю.
Но мне надо удалять элементы редко.
И вообще, наверное возможно обратиться в std::deque, в котором std::queue хранит данные.
Re[2]: Удаление элемента из std::queue
От: VNG Беларусь https://organicmaps.app/
Дата: 10.02.04 10:28
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Вытолкнуть все элемены, перед ним стоящие. А если серьезно, то queue для этого не предназначен. Используй что-то другое (deque, list например)


deque тоже не подходит
Re[3]: Удаление элемента из std::queue
От: Lorenzo_LAMAS  
Дата: 10.02.04 10:29
Оценка:
VNG>deque тоже не подходит

Почему? Если ты считаешь vector подходящим, то что не так с deque?
Of course, the code must be complete enough to compile and link.
Re[4]: Удаление элемента из std::queue
От: VNG Беларусь https://organicmaps.app/
Дата: 10.02.04 10:34
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

VNG>>deque тоже не подходит


L_L>Почему? Если ты считаешь vector подходящим, то что не так с deque?


Да я был не прав. Извини.
Re[3]: Удаление элемента из std::queue
От: VNG Беларусь https://organicmaps.app/
Дата: 10.02.04 10:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, VNG, Вы писали:


VNG>>Здравствуйте, Аноним, Вы писали:


А>>>Как удалить элемент из std::queue, если он не первый?


VNG>>Если Вам требуется удалять произволные элементы из контейнера, то лучше попробовать std::vector или std::list.

VNG>>В принципе std::queue это не контейнер, а адаптер над контейнером (скорее всего над std::vector).

А>Да, я это понимаю.

А>Но мне надо удалять элементы редко.
А>И вообще, наверное возможно обратиться в std::deque, в котором std::queue хранит данные.

Попробуй "насильственно" привести std::queue в std::deque и работать уже с std::deque.
Re[4]: Удаление элемента из std::queue
От: Bell Россия  
Дата: 10.02.04 10:45
Оценка:
Здравствуйте, VNG, Вы писали:

VNG>Попробуй "насильственно" привести std::queue в std::deque и работать уже с std::deque.


Ну вот так вот точно делать не стоит. Если уж так важен доступ к внутреннему контейнеру — используй наследование, и в классе — наследнике используй защищенный член c.


namespace std {
   template <class T, class Container = deque<T> >
   class queue {
   public:
      typedef typename Container::value_type value_type;
      typedef typename Container::size_type size_type;
      typedef Container container_type;
   protected:
      Container c;
...
Любите книгу — источник знаний (с) М.Горький
Re[5]: Удаление элемента из std::queue
От: Аноним  
Дата: 10.02.04 10:56
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, VNG, Вы писали:


VNG>>Попробуй "насильственно" привести std::queue в std::deque и работать уже с std::deque.


B>Ну вот так вот точно делать не стоит. Если уж так важен доступ к внутреннему контейнеру — используй наследование, и в классе — наследнике используй защищенный член c.



B>
B>namespace std {
B>   template <class T, class Container = deque<T> >
B>   class queue {
B>   public:
B>      typedef typename Container::value_type value_type;
B>      typedef typename Container::size_type size_type;
B>      typedef Container container_type;
B>   protected:
B>      Container c;
B>...
B>



Тоесть сделать свой контейнер?
Re[6]: Удаление элемента из std::queue
От: Bell Россия  
Дата: 10.02.04 11:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Тоесть сделать свой контейнер?


Ну да.

template<class T, class Container = deque<T> >
class MySuperQueue : public std::queue<T, Container>
{
...
public:
   void erase(size_t pos) {...}
};
Любите книгу — источник знаний (с) М.Горький
Re[5]: Удаление элемента из std::queue
От: VNG Беларусь https://organicmaps.app/
Дата: 10.02.04 11:02
Оценка:
Здравствуйте, Bell, Вы писали:

B>Ну вот так вот точно делать не стоит. Если уж так важен доступ к внутреннему контейнеру — используй наследование, и в классе — наследнике используй защищенный член c.


Соглосен, что что криво, но я продложил этот вариант исходя из того, что товарищу надо только в исключительном
случае удалить произвольный элемент из std::queue. Если же это не так, то стоит задуматься о целесообразности
использования std::queue.
Re[6]: Удаление элемента из std::queue
От: Аноним  
Дата: 10.02.04 11:11
Оценка:
Здравствуйте, VNG, Вы писали:

VNG>Здравствуйте, Bell, Вы писали:


B>>Ну вот так вот точно делать не стоит. Если уж так важен доступ к внутреннему контейнеру — используй наследование, и в классе — наследнике используй защищенный член c.


VNG>Соглосен, что что криво, но я продложил этот вариант исходя из того, что товарищу надо только в исключительном

VNG>случае удалить произвольный элемент из std::queue. Если же это не так, то стоит задуматься о целесообразности
VNG>использования std::queue.

Да, я понимаю, что в таком случае от std::queue придется отказаться.
Оказывается, он вообще не предназначен для удаления произвольного элемента.
Просто в моём случае это потребует большой переделки кода.

Предлагаю на этом закончить обсуждение.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.