簡體   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