[英]C++ “<”, not less than operator?
在以下二進制搜索樹的代碼中:
template <class TKey>
class bst<TKey>::node *bst<TKey>::insert(node *T, TKey &key)
{
if (T == NULL) {
T = new node;
T->key = key;
} else if (T->key == key) {
cout << "key " << key << " already in tree" << endl;
} else {
int dir = T->key < key;
T->link[dir] = insert(T->link[dir], key);
}
return T;
}
我很困惑什么線
int dir = T->key < key;
是在做。 我可以理解“int dir = T-> key”,雖然當然沒有意義,但我之前沒有看到以這種方式使用的“<”運算符。 有線索嗎?
T->key < key
是一個條件。 它將評估為true
或false
。 如果計算結果為true
,則dir
將獲得值1
,否則將獲得值0
。
int dir = T->key < key;
是寫作的簡短形式
int dir;
if(T->key < key)
dir = 1;
else
dir = 0;
將boolean
賦給int
,它將獲得對應於false
或true
的值0
或1
。
如果操作員沒有超載,那么它具有通常的含義; 它評估為true
或false
。 這是bool
類型,因此可以隱式轉換為int
。
但是,如果TKey
是一個類並且重載它,或者存在全局重載,那么除非我們看到代碼,否則我們不知道它做了什么。
<
如果第一個操作數小於第二個操作數,則返回1,否則返回0。
<
運算符是一個布爾比較運算符 - 即,如果條件為假,則計算結果為0
如果條件為真,則計算結果為1
。 它通常用在條件語句中,但直接使用返回值是完全有效的。 在這種情況下,如果值T->key
是小於的值key
, dir
將1
否則dir
將是0
。
好吧,由於二叉搜索樹存儲的值小於左邊的值,右邊的值更大,因此需要選擇插入的方向。 為此,您要將密鑰與當前節點的值進行比較。 此比較的結果存儲在dir變量中。 因此,如果key小於T的值,則dir得到1,表示鏈接[]中的左側,它保存指向節點T的左右分支的指針。然后以T的左節點遞歸地完成插入。這是為什么你在那里進行比較。 只是為了看看我們是否必須將元素插入當前節點的右側或左側。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.