在SystemVerilog中,我有一个整数的动态数组。我需要修改这个数组,以便跳过前两个元素。为了向后兼容,我不能将数据类型更改为队列。(这将允许我做pop_front)。所以我想出了这段至少复制数组两次的繁琐代码。有没有更好的方法?
tmp_arr = new[dyn_arr.size() -2];
for(int i = 0; i < tmp_arr.size(); i++) begin
tmp_arr[i] = dyn_arr[i + 2]; // First Copy
end
dyn_arr = tmp_arr; // Second Copy我的测试也在edaplayground进行。https://www.edaplayground.com/x/2VPm
发布于 2018-08-17 00:58:35
根据你的工具对流运算符的支持程度,你可以这样使用它:
dyn_arr = {>>$size(dyn_arr[0]){dyn_arr with [2:dyn_arr.size()-1]}};这假设dyn_arr至少有3个元素长(即结果数组至少有1个元素长)。
否则,您可以始终使用循环将整个数组向下移位,而不是创建一个新数组:
for (int i = 2; i < dyn_arr.size(); i++) begin
dyn_arr[i - 2] = dyn_arr[i];
end
dyn_arr = new[dyn_arr.size()-2] (dyn_arr); // Only include this if you need to use dyn_arr.size with the smaller size after the operation is complete发布于 2018-08-17 00:59:09
不怎么有意思。流媒体运营商可以做到这一点,但可能更昂贵。
你可以试试
for(int i=2;i < dyn_arr.size(); i++)
dyn_arr[i-2] = dyn_arr[i];
dyn_arr = new[dyn_arr.size-2] dyn_arr;并希望编译器足够聪明,可以在不复制的情况下进行优化。
https://stackoverflow.com/questions/51881296
复制相似问题