我有一组数组,每个数组 ( data[]
) 都存储在一个双向链表节点ArrayNode
中。我从数组中的某个给定索引开始,然后迭代到另一个数组中的另一个索引(它们可能是同一个数组)。我确定我的两个节点是链接的,并且第一个节点位于第二个节点的“左侧”。
struct ArrayNode
{
ArrayNode* prev;
ArrayNode* next;
int data[16];
unsigned int count;
};
void iterate(ArrayNode* startnode, unsigned int startposition, ArrayNode* endnode, unsigned int endposition)
{
for (unsigned int index = startposition; index < startnode->count; ++index)
{
std::cout << startnode->data[index] << "\n"; //I'd do some processing here
}
for (ArrayNode* node = startnode->next; node != endnode; node = node->next)
{
for (unsigned int index = 0; index < node->count; ++index)
{
std::cout << node->data[index] << "\n"; //I'd do some processing here
}
}
for (unsigned int index = 0; index < endposition; ++index)
{
std::cout << endnode->data[index] << "\n"; //I'd do some processing here
}
}
上面的代码在几个方面存在缺陷。首先,如果startnode == endnode
,它会给出不正确的输出。其次,拥有 3 个循环对于维护和代码大小来说是低效的。似乎应该可以让中间嵌套循环优雅地处理所有情况,但我不知道如何。是吗?如果没有,应该怎么做?
如果可能的话,我想避免为此创建一个迭代器对象。