自定义搜索功能无法正常工作

时间:2013-08-03 20:45:07

标签: c++

我编写了以下函数,它以“块”作为参数,在块“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”。

1 个答案:

答案 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)。