![](/img/trans.png)
[英]Why is my Binary Search Tree void remove function not working properly?
[英]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.