出列时的奇怪现象

时间:2015-01-26 21:36:44

标签: c++ vector queue

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

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 ++中使用队列是否有问题

1 个答案:

答案 0 :(得分:3)

// 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();
}