龍神録をC++で作ってみようと思った時に、
弾などの配列をvector,listに変えたら実行速度はどうなるか気になったので実験。
それぞれint型の配列を作り、挿入・削除を繰り返しているだけです。
乱数で、毎回全部消さないようにしています。
ソースコード:
► スポイラーを表示
CODE:
#include
#include
#include
#include
#include
using namespace std;
#include
#define ARRAY_MAX 1000 //配列数(array用)
#define LOOP_TIME 10000 //ループ数
#define INS_NUM 100 //1回の挿入数
#define ERASE_NUM 5 //消去割合
int array_search(int ar[ARRAY_MAX]){
for(int i=0;i vec;
list lis;
int main(){
int start,end;
//array
fill(array,array+ARRAY_MAX,-1);
srand(100);
start = (int)timeGetTime();
for(int j=0;j::iterator itr = vec.begin() ; itr !=vec.end();itr++){
if(*itr==j%ERASE_NUM){
itr = vec.erase(itr);
itr--;
}
}
}
end = (int)timeGetTime();
printf("vector_time:%d[ms]\n",end-start);
//list
srand(100);
start = (int)timeGetTime();
for(int j=0;j::iterator itr = lis.begin() ; itr !=lis.end() ; itr++){
if(*itr==j%ERASE_NUM){
itr = lis.erase(itr);
itr--;
}
}
}
end = (int)timeGetTime();
printf("list_time:%d[ms]\n",end-start);
return 0;
}
この設定にした所、私の環境では
array_time:236[ms]
vector_time:193[ms]
list_time:91[ms]
こうなりました。
使う配列数が多いと、listがかなり早いです。
ただ、使う配列数が100以下等小さい場合、vectorがlistより早くなりました。
色々試した結果、
結論:
配列が100を超える場合は、 array > vector > list
配列が100を超えず少ない場合は、array > list > vector
考察:
100辺りでvectorの実行速度が遅くなるのは、erase時に配列をずらしているのが原因かな。
だとすると、構造体などサイズが大きい場合は、100以下でもvectorが遅くなったりするかも。
ちなみにdequeでもやってみましたが、どの場合でもかなり遅いです。