繁体   English   中英

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

[英]Custom search function not working properly

我已经编写了以下函数,它以“ block”作为参数,在“ lru”块列表中搜索“ block”。 这里的“块”是类“块”的一个实例。 以下是“ 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”。

第一个if覆盖空列表的情况,最后一个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, 请参见此处 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM