C++ 速度比較(3) return で値を返すvs参照しているvectorに値を入れる。(参照返し?)
Sponsored Links
皆さんこんにちわ。
お元気ですか?冬になると電気代がマッハやばいです。
さて、今回はreturnについて
vector型ってreturnできますよね?でも、よく関数に参照引数を渡して、それに値を突っ込む形が多いです。今回は参照するのが速いのかどうかについて検証。
まぁ前回の値渡し参照渡しから考えるに、多分値渡しした方はえらいことになりそうな気がしなくもない…。
実験
実験内容
N=1000000回同じことをさせ、参照返し(=返り値なしでvectorに値を入れる)のと値返しするのとで比較。
実験環境
OS:X 10.9.1
CPU:2.8GHz IntelCore i7
メモリ:16GB 1600MHz DDR3
結果
実験内容 | 速度 |
値返し | 109.303 |
参照返し | 29.185 |
感想
値返しはさけた方がいい、いや本当に。
次は…何させよう。
ソースコード
#include <iostream> #include <vector> using namespace std; int N = 1000000; void argument(vector<int> &array1,vector<int> &array2){ int size = array1.size(); for(int i = 0; i < size; i++){ array2[i] = i; } } vector<int> return_argument(vector<int> &array1,vector<int> &array2){ int size = array1.size(); for(int i = 0; i < size; i++){ array2[i] = i; } return array2; } int main(void){ int size = 10000; vector<int> array1(size); vector<int> array2(size); for(int i = 0; i < size; i++){ array1[i] = i; } clock_t start,end; start = clock(); for(int i = 0; i < N; i++){ argument(array1,array2); } end = clock(); cout << (double)(end-start)/CLOCKS_PER_SEC << endl; start = clock(); for(int i = 0; i < N; i++){ return_argument(array1,array2); } end = clock(); cout << (double)(end-start)/CLOCKS_PER_SEC << endl; }