為什麼C 遍歷多用 ,Java遍歷多用

時間 2021-05-07 03:27:26

1樓:張強

即使是C/C++我也習慣用《因為你並不能確保你的迴圈體內不會存在改變i的操作,一旦改變i的資料,導致迴圈跳過了i==5的這個迴圈,那麼這個迴圈會成為死迴圈,所以我認為除非有特定用途,迴圈條件裡面最好使用乙個範圍而不是某乙個值

2樓:

這裡用不等號是受迭代器遍歷寫法的影響。因為不是所有迭代器都支援用 "<" 號做比較的 (只有隨機訪問迭代器才能做 "<", ">" 等比較,非隨機訪問迭代器只可以用 "!=" 號做比較)。

而隨機訪問迭代器雖支援 "<" ,但是為了統一,還是慣常用 "!="

但是以我的個人習慣,int size_t 等整數型別還是喜歡用 "<" 號。

3樓:

執行效率不談。邏輯上,存在 != 者未必有 < 的意義。

比如 std::set<>::iterator,「相等/不等」是有意義的,用於標明是不是指向同乙個物件;而「小於/大於」就找不到任何意義了。

故而C++用 for(size_t i=0; i!=5; ++i),在不需要比較大小的應用場合,那麼就不應該強制它必須有比較大小的能力。

這類似於 strcpy( char *dest, const char *src ) 第二個引數為什麼加const。因為不需要改寫src,那麼就不應該強制src必須有被改寫的能力。

為什麼二叉樹的前序遍歷和中序遍歷對應入棧和出棧次序?

碳酸鈉 實際上比較一下前序和中序的迴圈遍歷演算法就容易懂了 前序和中序的區別在於訪問結點的位置不同 前序是在入棧時訪問,而中序是在出棧時訪問。具體來講,前序的訪問語句在每次壓棧時就會執行,中序的訪問語句在左子樹不斷壓棧,直到在最左處退棧時才執行,是不是符合印象中的遍歷順序?正是因為前序和中序依附於同...

為什麼java中宣告多用Map,List而不是具體實現型別?

比如介面的返回值,外部需要key,value 型別的資料結構,那就返回Map。至於你在實現的時候,如果沒有特殊需求,就用HashMap,高效讀寫 如果你需要排序,就來個TreeMap。但是對呼叫的人來說都是get key 或者用迭代器。 舉例List list new ArrayList 當我發現對...

為什麼說二叉樹遍歷用遞迴的方法不如非遞迴方法

薛瑄 雖然從時間複雜度來看,二叉樹遍歷遞迴和迭代都是O logn 但是這裡的常係數相差甚大。也就是說遞迴 O a Logn 迭代是O b Logn 這裡的a b 用鄧教授更通俗的說法是,1秒和1年都是O 1 但是他們的常係數相差甚遠。B樹和平衡二叉搜尋樹,查詢時間複雜度是O logn 但是常係數相差...