C C 中提高查詢速度的小技巧

2022-10-04 01:21:13 字數 1508 閱讀 8575

前言

當看到題目是在乙個陣列中查詢某乙個元素,或是在乙個字串中查詢某個字元,我們一般都會寫出如下**。但這樣的**雖然簡潔明瞭,但在陣列元素很多的情況下,並不是乙個很好的解決方案,今天我就來分享乙個提高查詢速度的小技巧.

//在乙個int陣列中查詢某個元素

int find(int a,int n,int element)

return -1;

}//在乙個字串中查詢某個字元

int find(string& str,char c)

return -1;

}雖然每次都是寫出這樣的**,但我總覺得for迴圈中的判斷有點多餘,比如陣列中有100個元素,我們明明知道前99個是不會陣列越界的,根本不需要判斷i程式設計珠璣的時候發現了這個小技巧,今天就來分享一下。

通過哨兵的方式去掉這多餘的判斷,將上面兩個方法改造如下:

//在乙個int陣列中查詢某個元素

int find1(int a,int n,int element)

a[n] = hold;

return i < n ? i : -1;

}//在乙個字串中查詢某個字元

int find1(string& str,char c)

str[n] = hold;

return i < n ? i : -1;

}我勒個去,怎麼變得這麼長,但的確是減少了判斷的次數,如果陣列較大的話提高執行速度肯定是一定的,如果你非要說陣列很小的話,說不定速度還要降低呢,那你不這樣寫不就得了,好了廢話少說,雖然**已經很簡單明瞭了,但我還是簡單說一下思路。

就是在陣列的末尾加乙個哨兵,即使不判斷i

先判斷最後乙個元素的值是不是我們要查詢的數,如果是,返回其下標;如果不是,將最後乙個數的值儲存起來,將要查詢的那個數賦給最後乙個元素,迴圈查詢指定的元素,不用判斷陣列越界,if語句必然break,將最後乙個元素的值還原,最後只用判斷i

最後在做乙個簡單的效能測試,看到底能否提高查詢速度。

測試**如下:

void testfind()

{ int n = 200000;

int* a = new int[n];

a[n-2] = 1;

dword start = ::gettickcount64();

for( intwww.cppcns.com i = 0; i < 10000; i++ )

find(a,n,1);

dword end = ::gettickcount64();

cout 程式設計客棧< endl;

start = ::gettickcount64();

for( int i = 0; i < 10000; i++ )

find1(a,n,1);

end = ::gettickcount64();

cout <

執行結果如下:

速度還是會快一點

總結本文標題: c/c++中提高查詢速度的小技巧

本文位址: /ruanjian/c/177107.html

提高網頁速度小技巧

網際網路頻寬越來越寬,似乎讓網頁的載入速度得到了質的飛躍。其實不然,因為隨著頻寬的提高,網頁上的物件也越來越多,因此加快網頁開啟速度還是乙個重要的課題。加快網頁的開啟速度,有三個路徑,一是提高網路頻寬,二是使用者在本機做優化,三是 設計者對網頁做一定的優化。這篇文章站在乙個 設計者的角度,分享一些優...

乙個提高查詢速度的小技巧

在乙個陣列中查詢某乙個元素,或是在乙個字串中查詢某個字元,我們一般都會寫出如下 這樣的 雖然簡潔明瞭,但在陣列元素很多的情況下,並不是乙個很好的解決方案,今天我就來分享乙個提高查詢速度的小技巧.在乙個int陣列中查詢某個元素 int find int a,int n,int element retu...

Qt中提高sqlite的讀寫速度

sqlite資料庫本質上來講就是乙個磁碟上的檔案,所以一切的資料庫操作其實都會轉化為對檔案的操作,而頻繁的檔案操作將會是乙個很好時的過程,會極大地影響資料庫訪問的速度。例如 向資料庫中插入100萬條資料,在預設的情況下如果僅僅是執行query.exec insert into database va...