Comment puis-je copier l'intégralité d'un vecteur dans une file d'attente?
Je suis à la recherche pour copier tout le contenu d'un vecteur dans une file d'attente en C++. Est-ce une fonction intégrée ou est-il nessesary faire une boucle sur chaque élément?
voir question à ce sujet: stackoverflow.com/questions/1723515/...
Voulez-vous dire un
Voulez-vous dire un
std::vector
et un std::queue
? Sinon, utilisez un std::deque
.OriginalL'auteur Bill Cheatham | 2011-11-17
Vous devez vous connecter pour publier un commentaire.
Si vous faites une nouvelle file d'attente, vous pouvez utiliser le constructeur:
(Vous pouvez changer le conteneur sous-jacent au goût, si
deque
est probablement la meilleure.)Si la file d'attente existe déjà, il n'y a pas de gamme à base de l'algorithme, bien que, vous pouvez facilement créer votre propre:
En aparté: Si votre algorithme exige que le montant de la flexibilité, vous êtes probablement mieux de simplement en utilisant un
std::deque
en premier lieu. Le conteneur de cartes (queue
etstack
) ne devrait être utilisé si vous voulez le dire explicitement, "c'est le comportement que je veux" (c'est à dire push/pop).queue
, pasdeque
.Dans un algorithme générique je préfère toujours
++begin
àbegin++
car elle permet d'éviter une potentielle (selonIter::value_type
dans ce cas) copie coûteux, même si elle rend le code de trois lignes de plus.Nope, même nombre de lignes 🙂 Merci encore!
OriginalL'auteur Kerrek SB
Probablement la meilleure façon est de pousser les éléments dans la file d'attente.
Même en utilisant std::copy est fastidieux car il faut les enrouler la file d'attente dans un adaptateur (Insérer dans une file d'attente STL en utilisant std::copy).
OriginalL'auteur log0
La file d'attente du constructeur est comme suit:
De sorte que vous pouvez avoir du vecteur v et de construire une file d'attente.
Cependant, vous ne pouvez pas le faire à push_back les éléments déjà initialisé q. Vous pouvez utiliser un autre Récipient, vider la file d'attente, ajouter votre vecteur de ce conteneur, et de créer une nouvelle file d'attente à partir de ce vecteur, mais je devrais itérer plutôt que de faire tout cela.
Finale réponse: Non, il n'y a pas une telle méthode mise en œuvre pour les files d'attente, vous pouvez utiliser deque ou iterate votre vecteur.
J'ai pensé qu'il était possible de le faire de cette façon, mais le principal problème est que vous ne seriez pas en mesure de
pop
éléments depuis le conteneur sous-jacent doit mettre en œuvrepop_font()
.Alors que vous auriez à faire une file d'attente à partir d'un deque à partir d'un vecteur, c'est pourquoi je serais plutôt d'itérer.
OriginalL'auteur Goodwine