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

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

C++速度比較(5) iterator vs forなどによる総なめ

Sponsored Links

皆さんこんにちわ。
お元気ですか。私は元気ですよーSVMってNeuralNetworkより難しい。

さて、STLのコンテナを使うとき、iteratorとforを使って全部に対して関数を実行することもあるでしょう。
しかしこの2つ違いはあるのでしょうか。調べてみました。

実験

実験内容

N=1000000回関数を実行する簡単なお仕事
vectorの長さは10000

実験環境

OS:X 10.9.1
CPU:2.8GHz IntelCore i7
メモリ:16GB 1600MHz DDR3

結果

実験内容 速度
size 24.637
iterator 119.006

コメント

iterator驚きの遅さ…。
sizeでループさせたほうが圧倒的に速い。

ソースコード

#include <iostream>
#include <vector>

int N = 1000000;
int length = 10000;

using namespace std;

void size_function(vector<int> &array){
	for(int i = 0; i < length; i++){
		array[i];
	}
}

void iterator_function(vector<int> &array){
	vector<int>::iterator it = array.begin();
	for(it; it != array.end(); it++){
		*it;
	}
}

int main(int argc, char const *argv[])
{
	vector<int> vect(length);
	for(int i = 0; i < length; i++){
		vect[i] = i;
	}

	void (*po[])(vector<int> &) = {size_function,iterator_function};

	for(int i = 0; i < 2; i++){

		clock_t start,end;
		start = clock();

		for(int j = 0; j < N; j++){
			(po[i])(vect);
		}

		end = clock();
		cout << (double)(end - start) / CLOCKS_PER_SEC << endl;
	}
	return 0;
}