pourquoi std::file d'attente ne supporte pas la fonction clear ()?
J'ai obligation de ce genre. Pour une fonction, je reçois d'entrée sous forme d'un flux de nombres. Je veux dire, fonction continue de s'appelle avec un numéro unique à chaque appel. Je suis à l'aide de la file d'attente pour le stockage des flux de nombres. J'ai besoin de traiter un collectées série de chiffres uniquement lorsqu'une condition est satisfaite. Si la condition n'est pas satisfaite j'ai besoin de jeter tous les éléments dans la file d'attente, puis de commencer à stocker de nouveaux numéros dans que. Pour vider la file d'attente, je ne pouvais pas trouver la méthode clear (). Donc, je suis en boucle comme ci-dessous.
while(!q.empty())
q.pop();
J'ai eu algorithme efficace pour la compensation de la file d'attente à
Comment faire pour effacer le std::file d'attente de manière efficace?
Ma question est: Pourquoi la file d'attente ne supporte pas la fonction clear ()?
Quand deque et vecteur soutiennent la méthode clear (), quelle est la technique de la difficulté à soutenir pour la file d'attente ?
Ou est-ce mon au-dessus de cas d'utilisation très rares et ne sont donc pas pris en charge ?
Merci.
Vous devez vous connecter pour publier un commentaire.
Selon http://www.cplusplus.com/reference/stl/queue/,
ce qui signifie que la file d'attente est déjà un conteneur existant, et il est juste vraiment est une interface de ce conteneur, comme une file d'attente FIFO.
Cela signifie que les files d'attente ne sont pas destinés à être effacé. Si vous souhaitez effacer une file d'attente, cela signifie que vous avez réellement besoin d'utiliser un objet qui n'est pas une file d'attente, et, par conséquent, vous devez utiliser à la place du sous-jacent type de conteneur, étant un deque par défaut.
std::queue
est une altération de la file d'attente signifiait pour les très limité utilise, c'est le message?En dehors de ce qui a été dit déjà, vous peut clair une file d'attente très facilement:
ou en C++11
q = {};
q={}
donne l'erreurconverting to std::queue<...> from initializer list would use explicit constructor
.queue
est juste un adaptateur pour certains conteneur sous-jacent, par défaut, unedeque
, avec restriction de la fonction (comme vous l'avez mentionné ici). Si vous voulez que le plein soufflé fonction de l'utilisation du sous-jacentdeque
au lieu dequeue
.Ajouté à ma liste croissante de "faire de la STL lisibles" fonctions:
C'est juste un wrapper autour de sellibitze excellente réponse, mais je n'ai pas à également ajouter un commentaire à chaque fois que j'utilise la technique.