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が圧倒的でしたとさ
この記事が気に入ったらサポートをしてみませんか?