C - 推回队列列表

C++ - Pushing back a list of queues

本文关键字:队列 列表      更新时间:2023-10-16

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

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);

可以正常工作,但是由于有多个客户会收到此消息,因此我希望在"队列列表"中使用它,而不是创建15-20左右的队列。

*MsgItqueue<messages>类型,您正在尝试插入类型char[64]的变量。

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

只需使用 MsgIt->push(Message)而不是尴尬的解释即可。.操作员的优先级高于*操作员,因此发生的事情是它试图在迭代器上调用.,而不是迭代器指向的内容,然后试图解除返回值,这两个值都不是您想要的。您必须执行(*MsgIt).push才能使用退化获得所需的结果。

您对迭代器的使用也不是您应该如何做的。它应该看起来像:

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

最后,正如@ChronoTrigger所述,至少在此代码中,您实际上并未在MessageList列表中放置任何queue s。因此,首先没有push可以。