工作中想寫個變形的二分查詢, 於是想去std中看看std::binary_search有沒有什麼可以直接複製的原始碼, 忽然意識到乙個挺有意思的問題。
先把std::binary_search的原始碼粘上:
template inline
bool binary_search(_fwdit _first, _fwdit _last, const _ty& _val)
template inline
bool binary_search(_fwdit _first, _fwdit _last,
const _ty& _val, _pr _pred)
template inline
_fwdit lower_bound(_fwdit _first, _fwdit _last,
const _ty& _val, _pr _pred)
template inline
_fwdit _lower_bound(_fwdit _first, _fwdit _last,
const _ty& _val, _pr _pred, _diff *)
else
_count = _count2;
}return (_first);
}template inline
void _distance(_init _first, _init _last, _diff& _off)
template inline
void _distance2(_init _first, _init _last, _diff& _off,
input_iterator_tag)
我用binary_search是為了提公升速度來著, 結果裡面用了這個distance, 求fisrt到last的距離, 再得到 [fisrt、last]的中間資料去比較。如果不等於目標資料再重複這個流程。
然而distance的原始碼是:
for (; _first != _last; ++_first)
++_off;
what???
那我為毛不遍歷一遍, 看看當前資料是否等於目標資料?
for (; _first != _last; ++_first)
{if(*_first == val) return true;
有誰出來解釋一下? 和周圍同事討論了一下, 有的認為這是通用演算法, 不是專業演算法; 有的認為是下圖這樣的,大家怎麼看?
你擔心handlerThread的效率問題嗎?
handlerthread handler looper messagequeue相互關聯對應 queue是通過msg.next指向下乙個msg來實現,mmessages代表當前的message,每取出乙個msg,移動一次mmessages,一直到最後乙個msg handlerthread是乙個執行...
乙個effective java中的效率問題
package com.liuc public class autopackage long end system.currenttimemillis system.out.println end start 1000 執行時間19s 和下面這個程式 package com.liuc public ...
Linq中Count 和Any 引發的效率問題
1 count和any 今天看了0 來判斷集合非空 href target blank 鶴沖天的文章 linq 切勿使用 count 0 來判斷集合非空 有所收穫,寫下文章總結一下 先看如下 1 static void main string args 212 public static ienum...