0
内部队列中的项目当我们需要删除队列里面的一些项目,我们可以很容易地编写代码象下面这样:删除foreach循环
foreach(queue[i]) begin
if(queue[i].value == 1)
queue.delete(i);
end
但在上面的代码中的bug,当队列[0] ==队列[1] == 1。因为queue.delete(0)将更改队列中项目的所有索引。
所以目前我使用如下代码:
foreach(queue[i]) begin
if(queue[i].value == 1) begin
queue.delete(i);
i--;
end
end
它的工作原理,但它看起来混乱乍一看。
所以我的问题是: 有没有更好的解决方案在这个问题在系统verilog?
[这个问题]的解决方案(http://stackoverflow.com/questions/30494550/how-to-match-and-delete-an-element-from-a-queue)不适用于我。类似的解决方案可以使用'repeat'循环来实现:'repeat(q.size())begin if(q [i] == 1)q.delete(i); i ++; end'。请注意,即使是队列更改的大小,“repeat”循环中的迭代器也是不变的。 – sharvil111
@ sharvil111我原来的问题有一个错字。我修改了它,现在它应该可以工作。 – awill
我在之前的评论中指出了类似的问题。这是这个问题的简单链接:http://stackoverflow.com/questions/30494550/how-to-match-and-delete-an-element-from-a-queue – sharvil111