.pop_~と.sizeの併用
概要
全ての配列に対して、popしながら処理をする
ソースコード
間違い
int data[$];
int dt;
$display("## push random number");
repeat(10)data.push_back($random);
for(int i=0;i<data.size();i++)begin
dt=data[i];
$display("%0d) data=%0d",i,dt);
end
$display("## pop_front array");
for(int i=0;i<data.size();i++)begin
dt=data.pop_front();
$display("%0d) data=%0d",i,dt);
end
dataに10個の乱数をpushし、すべてをpopする。
シミュレーション結果
## push random number
0) data=303379748
1) data=-1064739199
2) data=-2071669239
3) data=-1309649309
4) data=112818957
5) data=1189058957
6) data=-1295874971
7) data=-1992863214
8) data=15983361
9) data=114806029
## pop_front array
0) data=303379748
1) data=-1064739199
2) data=-2071669239
3) data=-1309649309
4) data=112818957
10個のpushについては確認できたが、pop側が5個しか出来ていない。
修正後
int data[$];
int dt;
$display("## push random number");
repeat(10)data.push_back($random);
for(int i=0;i<data.size();i++)begin
dt=data[i];
$display("%0d) data=%0d",i,dt);
end
$display("## pop_front array");
for(int i=0;data.size()>0;i++)begin
dt=data.pop_front();
$display("%0d) data=%0d",i,dt);
end
popすることでdata.sizeは変化してしまう。
for(int i=0;i<data.size();i++)begin
↓
for(int i=0;data.size()>0;i++)begin
と変更。
最終更新:2009年02月04日 10:10