字符数组的队列

时间:2011-12-07 00:15:06

标签: c++ types stl queue char

include <queue>
using namespace std;
char msg[1000];

现在,我希望有一个可以存储5种此类消息的队列。因此,它是一个大小为5的队列,包含5个字符数组,每个数组最多可包含1000个字符。

如何启动队列?我尝试了这个,但它没有用。

char msg[1000];
queue<msg> p;

4 个答案:

答案 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添加到队列中,它们就不会在你的堆栈上(即你需要用newmalloc创建它们)记得在处理队列时删除它们。没有简单的方法可以确定一个是在全局空间中,一个是在堆栈中,还是一个是用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'那样的变量名。