File d'attente de tableau de caractères
include <queue>
using namespace std;
char msg[1000];
Maintenant, je veux avoir une file d'attente qui peut stocker 5 de ce genre de msg. Donc, c'est une file d'attente de taille 5 qui contient 5 tableaux de caractères, chaque tableau peut contenir jusqu'à 1000 caractères.
Comment puis-je lancer la file d'attente? J'ai essayé ceci mais ça ne fonctionne pas.
char msg[1000];
queue<msg> p;
- Ce qui n'a pas de travail? erreur de compilateur?
std::string
est soignée.- Merci. Je n'ai
deque<char*> QUEUE; while(1){ char msg[1000]; msg = newString(); QUEUE.push(msg); }
. Puis j'ai découvert que tous les éléments de la file d'attente sera la même car ils font référence à la même chosemsg
. Comment puis-je résoudre le problème?
Vous devez vous connecter pour publier un commentaire.
Edit: std::vector peut être un meilleur choix, il vous suffit de relire votre question, et vu la taille de la matrice de caractères. Si vous l'utilisez pour stocker des données binaires, un
std::queue< std::vector <char> > msgs
est probablement votre meilleur choix.Vous ne pouvez pas utiliser une variable de type. Vous pourriez avoir une file d'attente de pointeurs de caractère si.
Vous pourriez tout aussi bien utiliser std::string et éviter les erreurs. Si vous utilisez un
char*
vous voulez une fonction pour ajouter des messages de la file d'attente, ils ne peuvent pas être sur la pile (c'est à dire que vous auriez besoin de les créer avecnew
oumalloc
) que vous ne devez pas oublier de les supprimer lorsque vous avez traité la file d'attente. Il n'y aurait pas de moyen facile de déterminer si l'on est dans l'espace global, on est sur la pile, ou de l'une a été faite avec le nouveau. Conduirait à un comportement indéfini ou des fuites de mémoire lorsqu'il n'est pas manipulé correcte.std::string
permettrait d'éviter tous ces problèmes.Si c'est juste 5 messages Standard, puis
const char*
serait un bon choix, mais si ils sont toujours les mêmes messages, vous devriez envisager une file d'attente d'entiers qui font référence au message que vous souhaitez. De cette façon, vous pouvez associer plusieurs actions avec elle. Mais que vous pourriez aussi envisager une file d'attente d'objets.deque<char*> QUEUE; while(1){ char msg[1000]; msg = newString(); QUEUE.push(msg); }
. Puis j'ai découvert que tous les éléments de la file d'attente sera la même car ils font référence à la même chosemsg
. Comment puis-je résoudre le problème?newString()
est symboliser une fonction qui change le vaule de lamsg
. J'ai utiliséchar *msg = new char[1000];
au lieu de cela et maintenant ça fonctionnetypedef char msg[1000];
mais comme Tomalak mentionné, cela ne fonctionne pas avec des conteneurs STL. L'enveloppant avec une struct des correctifs, si quelque chose à l'aidestd::string
oustd::vector
pourrait être plus efficace, en fonction de la nature des données.std::array<char, 1000>
. Ce qui se fait de la même chose, mais vous offre également des fonctions pratiques.msg
est un tableau, pas un type. Et comme les tableaux ne sont pas copiable, ce n'est pas d'aller travailler, de toute façon. Pourquoi pas unstd::queue<std::string>
à la place?Tout d'abord, vous avez besoin d'un signe # devant votre déclaration.
Deuxièmement, lorsque vous déclarez une file d'attente, vous mettez le type que vous voulez pour contenir dans les crochets (dans votre cas 'char*'), et non pas un nom de variable comme 'msg'.