簡體   English   中英

C ++“<”,不低於運算符?

[英]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是一個條件。 它將評估為truefalse 如果計算結果為true ,則dir將獲得值1 ,否則將獲得值0

int dir = T->key < key;

是寫作的簡短形式

int dir;
if(T->key < key)
    dir = 1;
else
    dir = 0;

boolean賦給int ,它將獲得對應於falsetrue的值01

如果操作員沒有超載,那么它具有通常的含義; 它評估為truefalse 這是bool類型,因此可以隱式轉換為int

但是,如果TKey是一個類並且重載它,或者存在全局重載,那么除非我們看到代碼,否則我們不知道它做了什么。

<如果第一個操作數小於第二個操作數,則返回1,否則返回0。

<運算符是一個布爾比較運算符 - 即,如果條件為假,則計算結果為0如果條件為真,則計算結果為1 它通常用在條件語句中,但直接使用返回值是完全有效的。 在這種情況下,如果值T->key是小於的值keydir1否則dir將是0

好吧,由於二叉搜索樹存儲的值小於左邊的值,右邊的值更大,因此需要選擇插入的方向。 為此,您要將密鑰與當前節點的值進行比較。 此比較的結果存儲在dir變量中。 因此,如果key小於T的值,則dir得到1,表示鏈接[]中的左側,它保存指向節點T的左右分支的指針。然后以T的左節點遞歸地完成插入。這是為什么你在那里進行比較。 只是為了看看我們是否必須將元素插入當前節點的右側或左側。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM