我编写了以下函数,它以“块”作为参数,在块“lru”列表中搜索“块”。这里“块”是类“块”的实例。以下是“lru”的声明:
list<Block> lru;
以下是我的搜索功能:
int LRU::searchLRU(Block block)
{
if (lru.size() == 0)
{
lru.push_back(block);
return 1;
}
list<Block>::iterator i;
for (i = lru.begin(); i != lru.end(); i++)
{
if (i->get_set() == block.get_set() && i->get_index() == block.get_index())
{
lru.push_back(block);
lru.erase(i);
return 2;
}
}
if (lru.size() == size)
{
lru.pop_front();
lru.push_back(block);
return 3;
}
}
但问题是有时函数会返回“0”。因此,我的整体计划运作不正常。 我觉得我处理了所有案件。
有人可以指出错误,或者为什么函数返回“0”。
答案 0 :(得分:2)
第一个if覆盖空列表情况,最后一个覆盖整个列表情况,中间for循环覆盖非空未完整列表但是如果你没有找到块你将不会从它返回,所以如果它既不是满的也不是空的,你将通过从函数的末尾掉下来返回0。如果不清楚,我会尝试改写:
empty list -> add item, return 0
full list -> pos item, add item, return 3
partially full list -> find item, *if found* {erase item, add item, return 2}
如果找到问题,如果找不到,则不做任何事情。你会掉头(在main中返回0,否则是UB,see here)。