【发布时间】:2020-03-07 20:16:39
【问题描述】:
我有一个包含项目的数组和一个包含范围的数组,
struct range
{
uint32_t head;
uint32_t tail;
};
head 和 tail 是开始和结束索引,每个 head 都是 64 字节对齐的。
0 64 128 192 256 320 384 448 512 ...
items: |--------| |----------------| |---------| ...
ranges: head tail head tail head tail ...
如何在没有双重 for 循环的范围内迭代项目,
for (uint32_t i = 0; i < range_count; i++)
{
for(uint32_t j = ranges[i].head; j < ranges[i].tail; j++)
{
... items[j];
...
}
}
只使用单个 for 循环?
【问题讨论】:
-
使用双 for 循环有什么问题?它的优点是易于理解。
-
内循环的条件应该是“
j < ranges[i].tail”吗?如图所示,没有多大意义。 -
目前的解决方案有什么不好?
-
您可以编写一个自定义迭代器类来执行此操作,但循环要简单得多
-
请决定您要使用C++还是C代码并删除其他标签