C ++ - 推回队列列表

时间:2014-03-12 03:23:16

标签: c++ list queue add elements

我已经创建了一个队列列表,并想知道我将如何能够推回队列以添加新元素。我有多个客户端发送消息,主机将按特定顺序向每个客户端发送完全相同的消息。我现在有

struct messages
{
    char buffer[64];
}

list<queue<messages>> MessageList;
for(int i = 0; i < numOfClients; i++)
{
    queue<messages> tempQueue;
    MessageList.push_back(tempQueue);
}
list<queue<messages>>::iterator MsgIt;
MsgIt = MessageList.begin();

messages storedMsg = {}
char tempMsg[64] = "This is the message to be stored!";
for(int j = 0; j < 64; j++)
    storedMsg.message[j] = tempMsg[j];
for(int i = 0; i < numOfClients; i++)
{
    *MsgIt.push(storedMsg);
    MsgIt++;
}

似乎有一个错误导致*MsgIt不允许我访问push()功能。

我理解

queue<messages> MessageList;
MessageList.push(Message);

可以工作,但由于有多个客户端收到此消息,我希望在队列列表中使用它&#34;而不是创建15-20个左右的队列,这些队列很难管理。

2 个答案:

答案 0 :(得分:1)

*MsgIt的类型为queue<messages>,您尝试插入char[64]类型的变量。

您应首先插入queue,然后在queue中插入您的消息。

答案 1 :(得分:0)

只需使用MsgIt->push(Message)而不是尴尬的解除引用。 .运算符的优先级高于*运算符,所以发生的事情是它试图在迭代器上调用.而不是迭代器指向的函数,然后尝试取消引用返回值,这两者都不是你想要的。您必须执行(*MsgIt).push才能使用解除引用来获得所需的结果。

此外,您对迭代器的使用并不是您应该如何做到的。它应该看起来像:

for(MessageList::iterator MsgIt = MessageList.begin(), MsgIt < MessageList.end(), MsgIt++)

最后,正如@ChronoTrigger所提到的,您实际上并没有在queue列表中放置任何MessageList,至少在此代码中。因此,首先push没有任何内容。