のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

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;
}