include <queue>
using namespace std;
char msg[1000];
现在,我希望有一个可以存储5种此类消息的队列。因此,它是一个大小为5的队列,包含5个字符数组,每个数组最多可包含1000个字符。
如何启动队列?我尝试了这个,但它没有用。
char msg[1000];
queue<msg> p;
答案 0 :(得分:3)
struct msg {
char data[1000];
};
queue<msg> p;
答案 1 :(得分:2)
msg
是一个数组,而不是一个类型。由于阵列不可复制,因此无论如何都不会起作用。为什么不改为std::queue<std::string>
?
答案 2 :(得分:2)
编辑: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*
你想要一个函数将msgs添加到队列中,它们就不会在你的堆栈上(即你需要用new
或malloc
创建它们)记得在处理队列时删除它们。没有简单的方法可以确定一个是在全局空间中,一个是在堆栈中,还是一个是用new创建的。如果处理不当,会导致未定义的行为或内存泄漏。 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;
}
答案 3 :(得分:0)
首先,您需要在include语句前加上一个“#”符号。
其次,当您声明队列时,您将要包含的类型放在尖括号中(在您的情况下为'char *'),而不是像'msg'那样的变量名。