日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

c++ 各种求min/max方法效率测试

發(fā)布時(shí)間:2023/12/10 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ 各种求min/max方法效率测试 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

由于min跟max是等價(jià)的,下面只對(duì)求min進(jìn)行測(cè)試
每次測(cè)試執(zhí)行min 109次,記錄時(shí)間(單位:秒)
耗時(shí)以STL為參考基準(zhǔn)


運(yùn)行環(huán)境
Windows 7 32-bit on Intel Pentium G2030 @ 3.0GHz
編譯器
MinGW GCC 4.8.1 32-bit Release
附加命令
-g -Wall -Wl,-stack,100000000


int 單變量

測(cè)試次數(shù)Test 1Test 2Test 3Avg百分比
for循環(huán)2.1212.1062.0902.10656.2%
STL3.7443.7443.7443.744100.0%
普通函數(shù)3.3863.3853.4013.39190.6%
inline普通函數(shù)3.4323.4483.4013.42791.5%
傳引用函數(shù)3.2293.0733.0583.12083.3%
inline傳引用函數(shù)3.4473.4013.4003.41691.2%
define2.3872.3872.4032.39263.9%

int 表達(dá)式

測(cè)試次數(shù)Test 1Test 2Test 3Avg百分比
for循環(huán)2.0912.0902.1062.09630.0%
STL7.0046.9736.9736.983100.0%
普通函數(shù)6.1786.1786.1786.17888.5%
inline普通函數(shù)6.1626.1626.1626.16288.2%
define5.2735.2885.2895.28375.7%

long long 單變量

測(cè)試次數(shù)Test 1Test 2Test 3Avg百分比
for循環(huán)2.1692.0902.1062.12251.6%
STL4.1184.1034.1034.108100.0%
普通函數(shù)5.5075.4765.4915.491133.7%
inline普通函數(shù)5.4915.4915.5075.496133.8%
傳引用函數(shù)3.8533.8373.8533.84893.7%
inline傳引用函數(shù)3.8383.8383.8383.83893.4%
define2.0752.0442.0902.07050.4%

long long 表達(dá)式

測(cè)試次數(shù)Test 1Test 2Test 3Avg百分比
for循環(huán)2.0902.1212.1062.10611.0%
STL19.18819.14219.15719.162100.0%
普通函數(shù)20.35820.04620.06220.155105.2%
inline普通函數(shù)20.26520.23320.10920.202105.4%
define16.22416.22416.20816.21984.6%

double 單變量

測(cè)試次數(shù)Test 1Test 2Test 3Avg百分比
for循環(huán)2.0742.0912.0912.08560.7%
STL3.4483.4473.4163.437100.0%
普通函數(shù)10.92010.93610.90510.920317.7%
inline普通函數(shù)10.87310.98210.87310.909317.4%
傳引用函數(shù)3.2303.2303.2293.23094.0%
inline傳引用函數(shù)4.3214.3524.3374.337126.2%
define2.4022.4022.4342.41370.2%

double 表達(dá)式

測(cè)試次數(shù)Test 1Test 2Test 3Avg百分比
for循環(huán)2.2782.1222.1222.17447.8%
STL4.5554.5554.5394.550100.0%
普通函數(shù)11.60611.59111.59111.596254.9%
inline普通函數(shù)11.65411.59111.65411.633255.7%
define2.6372.6212.6212.62657.7%

包含適量變量的struct 單變量

測(cè)試次數(shù)Test 1Test 2Test 3Avg百分比
for循環(huán)2.1532.1212.1062.12717.2%
STL12.62112.24612.23112.366100.0%
普通函數(shù)26.86326.27126.28626.473214.1%
inline普通函數(shù)26.31726.30226.34926.323212.9%
傳引用函數(shù)17.80017.86217.79917.820144.1%
inline傳引用函數(shù)17.83117.75317.76917.784143.8%
define10.07810.03110.04610.05281.3%

包含適量變量的struct 表達(dá)式

測(cè)試次數(shù)Test 1Test 2Test 3Avg百分比
for循環(huán)2.2472.1212.1062.1583.8%
STL57.33057.26857.62757.408100.0%
普通函數(shù)70.82471.52771.77671.376124.3%
inline普通函數(shù)70.88771.32471.18371.131123.9%
define78.11077.20577.98577.767135.5%

總結(jié)

  • STL最穩(wěn)定
  • define在大部分情況是最快的
  • define主要耗時(shí)在計(jì)算表達(dá)式上
  • 如果創(chuàng)建當(dāng)前類(lèi)型的代價(jià)過(guò)高,傳引用的函數(shù)相對(duì)不傳的有明顯優(yōu)勢(shì)
  • 只要不去卡常數(shù),用STL自帶的就行了

源代碼

#include <cstring> #include <cmath> #include <cctype> #include <algorithm> #include <iostream> #include <windows.h> using namespace std; #define N 1010 #define PLL 9999999999999937LL #define P 999999937 #define foru(i,l,r) for (int i=l; i<=r; i++) #define ford(i,r,l) for (int i=r; i>=l; i--) #define read(x) (x=getint()) #define minorz(a,b) ((a)<(b)?(a):(b)) typedef long long LL; struct stt {int x;double z;LL e;char f;bool operator < (const stt a) const{return x<a.x;}stt operator + (stt a){stt r=a;r.x+=x;return r;}stt operator * (stt a){stt r=a;r.x+=x;return r;} }; typedef int integer;integer a[1000],b,c,d,y,z; int x;integer minfuc(integer a, integer b) {return a<b?a:b; } integer minfuc2(integer &a, integer &b) {return a<b?a:b; } inline integer inlminfuc(integer a, integer b) {return a<b?a:b; } inline integer inlminfuc2(integer &a, integer &b) {return a<b?a:b; } //#define val1 (a[233]*a[2]+a[666])%P //#define val2 (a[666]*a[4]+a[233])%P //#define val1 (a[233]*a[2]+a[666]) //#define val2 (a[666]*a[4]+a[233]) #define val1 a[233] #define val2 a[666] int main() {a[233]=233333333<<8, a[666]=666666666<<7; // a[233].=233333333<<8, a[666].x=666666666<<7; // a[233]+=a[666]+=0.321; // printf("%.3lf %.3lf\n",a[233],a[666]);foru(i,1,100) a[i]=i; // ===================================x=GetTickCount();foru(i,1,1000000000){ }printf("for cost %dms\n",GetTickCount()-x); // ===================================x=GetTickCount();foru(i,1,1000000000){y=min(val1,val2); }printf("STL cost %dms\n",GetTickCount()-x); // ===================================x=GetTickCount();foru(i,1,1000000000){y=minfuc(val1,val2);}printf("function cost %dms\n",GetTickCount()-x); // ===================================x=GetTickCount();foru(i,1,1000000000){y=inlminfuc(val1,val2); }printf("inline function cost %dms\n",GetTickCount()-x); // ===================================x=GetTickCount();foru(i,1,1000000000){y=minfuc2(val1,val2);}printf("function2 cost %dms\n",GetTickCount()-x); // ===================================x=GetTickCount();foru(i,1,1000000000){y=inlminfuc2(val1,val2); }printf("inline function2 cost %dms\n",GetTickCount()-x); // ===================================x=GetTickCount();foru(i,1,1000000000){y=minorz(val1,val2); }printf("define cost %dms\n",GetTickCount()-x);return 0; }

總結(jié)

以上是生活随笔為你收集整理的c++ 各种求min/max方法效率测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。