C++ vector vs list for文対決

一方向の探索でどれほど変わるのか… というわけでやっていきます

計測側

#include <windows.h>
#include <iostream>

#include "Obj.h"

const unsigned int RUN_NUM = 10000;

int main()
{
	std::cout << "計測開始~☆" << std::endl;
	std::cout << "計測回数は" << RUN_NUM << "回だよ☆" << std::endl;
	LARGE_INTEGER start, end;
	double time = 0.0f;

	for (int i = 0; i < RUN_NUM; ++i)
	{
		Obj obj;
		QueryPerformanceCounter(&start);
		//	ここから計測開始だよ☆

		obj.Run();

		//	計測終了~☆
		QueryPerformanceCounter(&end);
		time += static_cast<double>(end.QuadPart - start.QuadPart);
	}

	std::cout << "平均実行時間は" << (time / RUN_NUM) << "ナノ秒☆" << std::endl;
}

計測用のクラス

#include <vector>
#include <list>

class Obj
{
public:
	Obj();
	~Obj();

	void Run();
private:
	//std::vector<int> a;
	std::list<int> a;
};

Obj::Obj()	:	a(10000){}
Obj::~Obj(){}

void Obj::Run()
{
  // vector イテレーターバージョン
	//for (std::vector<int>::iterator it = a.begin(); it < a.end(); ++it)
	//{
	//	*it = 0;
	//}
   // vector インデックスバージョン
	//for (unsigned int i = 0, size = a.size(); i < size; ++i)
	//{
	//	a[i] = 0;
	//}

    // list 範囲forバージョン
	//for (int& i : a)
	//{
	//	i = 0;
	//}
    // list イテレーターバージョン
	for (std::list<int>::iterator i = a.begin();  i != a.end();  ++i)
	{
		*i = 0;
	}

}

なんだか不公平な気もしますが結果をどうぞ

一万個の要素を一万回回した結果

  • vectorのイテレーター    :    14209.2ナノ秒

  • vectorのインデックス    :     599.888ナノ秒

  • listの範囲for                    :    2559.57ナノ秒

  • listのイテレーター          :    16172.7ナノ秒

vectorが圧倒的でしたとさ

この記事が気に入ったらサポートをしてみませんか?