我正在使用模板并定義了以下模板化的 ListNode。
template <typename T>
class ListNode{
private :
public:
ListNode *left;
ListNode *right;
T data;
ListNode(T data){ this->data = data; }
};
如果我使用下面的原型在這個鏈表上實作搜索操作,那么函式的回傳值應該是什么。如果 T 是指標,我可以回傳 NULL,但如果 T 是 Complete 物件,回傳型別應該是什么,以及如何區分 T 是指標還是 Complete 物件。這個搜索函式如何對 T 起作用,其中 T 可以是一個指標或一個完整的物件。
T List_search(T srch_data);
T List_search(T srch_data) {
ListNode<T> *curr = head;
while (curr) {
if (comp_fn.compare_data (curr->data, srch_data) == 0)
return curr->data;
curr = curr->right;
}
return NULL; <<< Compilation error if T is complete object
}
uj5u.com熱心網友回復:
一種選擇是保持簡單:回傳找到的專案的地址,nullptr如果找不到專案:
template <typename T>
T* List_search(T srch_data)
{
ListNode<T> *curr = head;
while (curr)
{
if (comp_fn.compare_data (curr->data, srch_data) == 0)
return &curr->data;
curr = curr->right;
}
return nullptr;
}
然后客戶端將檢查 a nullptr,如果它不是 a nullptr,則可以取消參考該指標。
例如,如果鏈表節點持有一個int型別:
int* foundData = List_search(10)
if ( foundData )
{
std::cout << *foundData;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/402501.html
標籤:
上一篇:大一上學期小結
