C++速度比較(4) size関数について(vectorとかについてる関数)
Sponsored Links
皆さんこんにちわ
お元気ですか?私は寒いです。
さて、本日はsize()について
C++でプログラム書くときarray1.size()とか書くことありませんか?
特にforの条件部分で私は多いです。
プログラムで書くとき.size()と書くのが良いのか、はたまた一時保存しておき読み出すのがいいのか。
ぶっちゃけ可読性考えるなら変数に保存しておくのがベストだと思いますが、今回は速度比較の観点から考えてみましょう。
実験
実験内容
N回実行してfor(int j = 0; j < size; j++)とfor(int j = 0; j < array1.size(); j++)を比較した。
実験環境
OS:X 10.9.1
CPU:2.8GHz IntelCore i7
メモリ:16GB 1600MHz DDR3
実験結果
実験内容 | 速度 |
size() | 479.388 |
呼び出し | 426.1889 |
感想
呼び出す回数が多くなってくると差が広がる印象。
まぁとんでもない量の計算をしない限りは意識しなくてもいいのかな。
ソースコード
#include <iostream> #include <vector> using namespace std; int N = 1000000; int main(void){ int size = 100000; vector<int> array1(size); vector<int> array2(size); for(int i = 0; i < size; i++){ array1[i] = i; } clock_t start,end; //size関数を使う start = clock(); for(int i = 0; i < N; i++){ for(int j = 0; j < array1.size(); j++){ int a = array1[j] + array2[j]; } } end = clock(); cout << (double)(end-start)/CLOCKS_PER_SEC << endl; start = clock(); //sizeはあらかじめ指定 for(int i = 0; i < N; i++){ for(int j = 0; j < size; j++){ int a = array1[j] + array2[j]; } } end = clock(); cout << (double)(end-start)/CLOCKS_PER_SEC << endl; }