C - 推回队列列表
C++ - Pushing back a list of queues
我已经创建了一个队列列表,并且想知道我将如何推回队列以添加新元素。我有多个客户端发送消息,主机将以特定的顺序向每个消息发送完全相同的消息。我目前将其作为
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左右的队列。
*MsgIt
是queue<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
可以。
相关文章:
- 如何从队列插入到 2D 列表
- 在使用链接列表实施队列时,为什么插入复杂性o(1)
- 使用队列和列表 STL 进行C++分配。在将数据填充到列表或队列中然后打印该数据时遇到问题
- 队列顺序中的链接列表
- 将双重链接列表与C 中的堆栈和队列类链接
- 队列实现,带有C 中的链接列表
- C - 推回队列列表
- C++ 链接列表队列实现和析构函数错误:"Aborted (Core Dumped)"
- c2955 - 使用类模板 reuires 参数列表.队列
- 生产者-消费者队列 - std::queue 或用户编写的链接列表
- 为什么我不能使用大括号括起来的初始值设定项列表构造队列/堆栈?(C++11)
- 如何在链接列表队列中将一些数据从一个节点传输到另一个节点C++
- 如何在c++中动态创建一个具有列表底层数据结构的队列
- 具有列表容器的优先级队列
- 为优先级队列的基础容器使用自定义类型的列表
- 将项目从列表移动到堆栈或队列
- 用双链表构建一个学生列表队列
- 正在处理由双链接列表组成的学生队列
- 如何从具有相应优先级队列的列表中删除元素
- 无法使用基础列表推送到队列