limiter la taille de la File d'attente<T> en C++
Je remarque que le fil de la question similaire: Limiter la taille de la File d'attente<T>.NET?
C'est exactement ce que je veux faire, mais je ne suis pas à l'aide .net, mais C++ de GNU. Je n'ai pas de référence à la classe de base en C++ de GNU, donc java comme super.***()
ou .net comme base.***()
ne fonctionnera pas. J'ai essayé d'hériter de la classe de file d'attente, mais il s'avère en vain.
Ce que je veux faire:
spécifier la taille de la file d'attente, et automatiquement la file d'attente lorsque la file d'attente est pleine. Pour être précis: si la taille maximale de ma file d'attente est de 2, quand j'appuie sur le 3ème point, le 1er élément sera automatiquement déclenché avant de pousser le nouvel élément.
Comment mettre en œuvre une telle file d'attente?
Grâce.
J'allais poser la même question, mais ensuite j'ai d'abord clikced liée à la publication.
:)
OriginalL'auteur Lily | 2009-08-13
Vous devez vous connecter pour publier un commentaire.
Une nouvelle classe qui encapsule la file d'attente et de faire respecter une limite de taille dans la nouvelle classe.
+1 Cela me semble la solution la plus simple.
Je crois que c'est ce qu'il devient. C'est assez simple tout simplement parce que la file d'attente n'a vraiment a deux mutateurs, push_back, pop_front. Et, dans votre cas, il retire automatiquement vous devrez uniquement push_back comme membre du public.
Je suis en désaccord avec cette solution, car elle permet d'éviter à l'aide de cette file d'attente où un std lib file d'attente est prévu (comme ceci:
template< typename T, class C> void f(std::queue<T,C>&)
). Otoh, que, à l'aide de `std::file d'attente avec un autre conteneur sous-jacent permettra d'utiliser cette file d'attente avec suffisamment génériques de code qui attend std lib files d'attente.OriginalL'auteur Brian Ensink
Je sais que vous avez dit "automatique", mais, pour garder les choses simples: Encapsuler juste le
Enqueue()
ing dans une fonction locale (non, pas propre OO, mais il fonctionne):En passant, cela est plus susceptible d'être de Java au format. La classe est la file d'attente et l'initialisation n'a pas besoin de nouveau, seulement de la file d'attente<T> myQueue; suffira et vous avez besoin d'utiliser push, pop et de la taille à la place de ces méthodes.
+1, très simple.
OriginalL'auteur Arcane Engineer
Il sonne comme boost::circuclar_buffer est-ce que vous cherchez:
OriginalL'auteur Michael Burr
En supposant que par
Queue<T>
vous direstd::queue<T>
: Une file d'attente est juste un adaptateur pour certains conteneur sous-jacent qui est passé au moment de la compilation. Vous pouvez utiliser un conteneur déjà fait ce que vous voulez. Le meilleur ajustement semble être un tampon circulaire, si vous pouvez en trouver un qui prend en charge les opérations nécessaires pourstd::queue
(je pense que c'estpush_back()
,pop_front()
, etsize()
, mais je n'ai pas vérifié).OriginalL'auteur sbi