出队时的奇怪现象

strange phenomenon while dequeuing

我创建了一个队列向量。队列中有 10 个向量和大约 1000 个元素。然后,我尝试以循环方式使所有向量中的队列中的一个元素出队。但是我观察到一个非常奇怪的现象。我看到一些向量有 2 个元素出队,有些有 none。

struct pkt{
    int data;
    int time;
};

//Input queues are already filled with 1000 packets
std::vector<std::queue<pkt>> per_port_input_queue;
std::vector<std::queue<pkt>> per_port_output_queue;

// Dequeing one element at a time in a round-robin fashion
for(int i=0;i<5; i++)
{
decoded_pkt=per_port_input_queue[i].front();
send_to_output(decoded_pkt);
per_port_input_queue[decoded_pkt.data].pop();
}

void send_to_output(pkt decoded_pkt)
{
     per_port_output_queue[decoded_pkt.data].push(decoded_pkt);

}

您可以在下面找到观察到的输出和我的预期输出。

========================================================
Port       I/p (t=0)  (after dequing        My
                           5 pkt)       Expected result
========================================================
 0         1000          1000               999
 1         1000          1000               999
 2         1000          1000               999
 3         1000          998                999
 4         1000          1000               999
 5         1000          1000              1000
 6         1000          999               1000
 7         1000          999               1000
 8         1000          1000              1000
 9         1000          999               1000

有人可以向我解释为什么会发生这种情况以及如何避免这种情况。在 c++

中使用队列有什么问题吗
// Dequeing one element at a time in a round-robin fashion
for(int i=0;i<5; i++)
{
decoded_pkt=per_port_input_queue[i].front();
send_to_output(decoded_pkt);
per_port_input_queue[decoded_pkt.data].pop(); <<<<<======
}

弹出队列取决于你从第i个队列读取的数据,所以这并不奇怪。如果你想阅读然后弹出相同的队列,你需要去

// Dequeing one element at a time in a round-robin fashion
for(int i=0;i<5; i++)
{
decoded_pkt=per_port_input_queue[i].front();
send_to_output(decoded_pkt);
per_port_input_queue[i].pop();
}