Edit: std :: vector может быть лучшим выбором, просто перечитайте ваш вопрос и посмотрите размер массива символов.Если вы используете его для хранения двоичных данных, std::queue< std::vector <char> > msgs
, вероятно, ваш лучший выбор.
Нельзя использовать переменную в качестве типа.Вы можете иметь очередь указателей персонажей, хотя.
#include <iostream>
#include <queue>
std::queue <char*> msgs;
int main()
{
char one[50]="Hello";
msgs.push(one);
char two[50]="World\n\n";
msgs.push(two);
msgs.push("This works two even though it is a const character array, you should not modify it when you pop it though.");
while(!msgs.empty())
{
std::cout << msgs.front();
msgs.pop();
}
return 1;
}
Вы также можете просто использовать std :: string и избежать ошибок.Если вы используете char*
, вы хотите, чтобы функция добавляла сообщения в очередь, они не могут быть в стеке (т. Е. Вам нужно было бы создать их с new
или malloc
), чем вы должны были бы помнить, чтобы удалить их приВы обработали очередь.Не было бы простого способа определить, находится ли кто-то в глобальном пространстве, находится ли он в стеке, или был сделан с новым.При неправильном обращении может привести к неопределенному поведению или утечке памяти.std::string
позволит избежать всех этих проблем.
#include <iostream>
#include <queue>
#include <string>
std::queue <std::string> msgs;
int main()
{
msgs.push("Hello");
msgs.push("World");
while(!msgs.empty())
{
std::cout << msgs.front();
msgs.pop();
}
return 1;
}
Если это всего лишь 5 стандартных сообщений, тогда const char*
будет неплохим выбором, но если они всегда являются одинаковыми сообщениями, вам следует рассмотретьочередь целых чисел, которые ссылаются на сообщение, которое вы хотите.Таким образом, вы можете связать больше действий с ним.Но чем вы могли бы также рассмотреть очередь объектов.
#include <iostream>
#include <queue>
std::queue <int> msgs;
int main()
{
msgs.push(1);
msgs.push(2);
while(!msgs.empty())
{
switch(msgs.front())
{
case 1:
std::cout << "Hello";
break;
case 2:
std::cout << "World";
break;
default:
std::cout << "Unkown Message";
}
msgs.pop();
}
return 1;
}