std binary search效率問題

2021-09-22 01:29:03 字數 1278 閱讀 8655

工作中想寫個變形的二分查詢, 於是想去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...