c++ 常用程式設計--swap函式有幾種寫法?
在說c++模板的方法前,我們先想想c語言裡面是怎麼做交換的。
舉個例子,要將兩個int數值交換,是不是想到下面的**:
void swap(int&a , int &b)
如果要求不用臨時變數,可考慮異或的方式。
void swap(int&a,int&b)}
整型數比較容易理解,如果是字串呢?字串交換不能直接使用上面類似的方法賦值,想想原因是啥?:)
//偽**void swap(char* a,int sizeofa,char*b,int sizeofb) ; strncpy(temp,sizeof(temp)-1,a) ; strncpy(a,sizeofa-1,b); strncpy(b,sizeofb-1,temp) ;}
當然如果還可以用指標的指標。
void swap(char** a , char** b)
上面的方法都是按特定的型別做的處理,有沒更通用的寫法?
我們來看看c++ 怎麼處理交換:
void swap(string& a , string&b)
是不是和int的很像?
我們再來看看標準庫裡面swap的演算法是怎麼實現的:
namespace std}
template 是c++裡面很重要的概念,利用模板可以實現很多通用的演算法。上面的std::swap要求t類實現拷貝建構函式,並且和上面幾個實現一樣都需要做賦值運算,在海量的交易請求裡面會損耗效能。
因此在c++11的標準裡面對實現做了優化。看看上面字串類的交換只需要交換位址即可,根據這種思路在通用的swap只交換指標,而不是賦值。這樣的實現能將效能提高不少,對大型物件效率明顯提現。
templatevoid swap(t& a,t&b)
std::move 是不是很陌生:)它是c++11的新概念,在內部實現只是做了cast。
template decltype(auto) move(t&& param)
c++ 常用程式設計--swap函式有幾種寫法?
程式設計資料
plc程式語言有幾種?plc常用的程式語言
大家都知道學習某種新知識,技巧跟方法是關鍵的。正如新手剛開始接觸plc,它的軟體程式語言與一般計算機語言相比,具有明顯的特點,它既不同於高階語言,也不同於一般的組合語言,它既要滿足易於編寫又要滿足易於除錯的要求。海風教育退費 早期的plc僅支援梯形圖程式語言和指令表程式語言,現根據國際電工委員會制定...
c 程式設計常用函式備份
檢測cpu核心的數目 int core count 在開發過程中,難免要對程式的效率進行檢測,這時就要統計程式的執行時間,下面 給出了c 中如何輸出系統的時間 方法一 int get sys time 方法2 int get sys time 字串分割函式 str 待分割的字串 pattern 分割...
C程式設計常用函式介面總結
標頭檔案 輸入輸出函式 檔案開啟和關閉 file fopen const char filename,const char mode int fclose file stream 字元輸入輸出 int fgetc file fp int fputc int c,file fp getc和putc與這...