c 用find查詢vector中的某個元素位置和用迴圈遍歷查詢哪個更好?

時間 2021-05-30 16:15:15

1樓:節瓜

用find

寫多錯多,用find寫出問題的概率比自己寫迴圈小

如果你真的手寫迴圈都寫出問題,一般來說這種問題很難找,或者說你很容易忽略這裡也有可能出錯。

2樓:紀笑旭

主要看你要找的資料在煉表裡的什麼位置,不過能用find就不用遍歷。畢竟find和find_if基本上覆蓋了你能用到的所有資料型別的鍊錶。

實際上還有乙個推薦,用無序鍊錶會更快。無序鍊錶內部使用的hash來關聯資料,親測在10K資料量的鍊錶查詢上要比普通的map+find組合快100倍以上。

3樓:

建議實踐測試。

不開優化的話,find耗時約為直接迴圈的2倍。

O1優化的話,find稍快。

O2O3資料不好調整,經常是0或者長得受不了。

#include

#include

#include

#include

using

namespace

std;

intmain

()cout

<<"Find耗時"

<

)-t0<<

endl;t0

=time(0

);for

(intj=

0;j<

testn;++

j)}}

cout

<<"迴圈耗時"

<

)-t0<<

endl;a

[pos]=

0;}return0;}

4樓:libla

一般情況,使用封裝的肯定更好,除了語義更明確這個好處,還在於呼叫封裝的介面,隨著內部實現的公升級和優化,能夠免費享受到這些成果。

5樓:趙輝

99.99%的情況下都是使用stl的algorithm更優,那0.01%也是由於stl個別演算法要在泛用性和效率(空間、時間)之間做出權衡可能在極小概率不是你使用場景的最優解。

回歸到題目所說的std::find,不存在上述問題啊。

template< class ExecutionPolicy, class ForwardIt, class T >

ForwardIt find( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, const T& value );

其中的乙個過載,ExecutionPolicy提供了並行化的潛在能力它不香麼?

No Raw Loops帶來語義上更高的抽象層次它不香麼?

C 中 類的vector容器中如何通過類中的成員來查詢到含這個成員的類?不一定只有乙個類含該元素?

黃亮anthony 題目很模糊,不確認題目的含義是否如此,我還是寫個答案吧,如果題主看到,請修改一下問題。成員找自己的類是指這樣的情況 struct A A some 10 int pa some 2 a A pA A char pa offsetof A,a offsetof的原理大體為這樣 ch...

c 中 為什麼陣列不能被vector完全替代

hiJack 1.陣列的記憶體是是靜態,vector的記憶體是動態,可能發生拷貝變動。2.陣列效率高,vector效率相對低,因為vector實質上是在陣列的基礎上實現的。3.陣列可以與C相容,vector不可以 除此之外沒有區別,vector更方便 陳禮 原因很多,舉個例子,部分驅動程式是用c 寫...

c 中什麼時候用 ?

建議盡快轉入管理序列,成為CEO,走上人生巔峰int iXiaomingHeight 176 int iXiaohuaHeight 157 int iXiaomingWeight 60 int iXiaohuaWeight 40 int iXiaJibaSuan 0 bool bXiajibaRtn...