#include <iostream>
#include <list>
#include <vector>
#include <queue>
#include <chrono>
void vec_t(int size)
{
std::vector<int> t;
for (int i = 0; i < size; ++i)
t.push_back(i);
while (!t.empty())
t.erase(t.begin());
}
void list_t(int size)
{
std::list<int> t;
for (int i = 0; i < size; ++i)
t.push_back(i);
while (!t.empty())
t.pop_front();
}
void queue_t(int size)
{
std::queue<int> t;
for (int i = 0; i < size; ++i)
t.push(i);
while (!t.empty())
t.pop();
}
void time(int size)
{
auto start = std::chrono::high_resolution_clock::now();
vec_t(size);
auto end = std::chrono::high_resolution_clock::now();
std::chrono::nanoseconds elapsednano = end-start;
std::chrono::milliseconds elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(elapsednano);
std::cout<<"vector size: "<<size<<" elapsed milliseconds: " << elapsed.count()<<"\n";
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
start = std::chrono::high_resolution_clock::now();
list_t(size);
end = std::chrono::high_resolution_clock::now();
elapsednano = end-start;
elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(elapsednano);
std::cout<<"list size: "<<size<<" elapsed milliseconds: " << elapsed.count()<<"\n";
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
start = std::chrono::high_resolution_clock::now();
queue_t(size);
end = std::chrono::high_resolution_clock::now();
elapsednano = end-start;
elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(elapsednano);
std::cout<<"queue size: "<<size<<" elapsed milliseconds: " << elapsed.count()<<"\n";
}
int main()
{
for (int i = 10000; i <= 100000; i += 10000)
{
time(i);
std::cout<<std::endl;
}
return 0;
}
결과:
vector size: 10000 elapsed milliseconds: 10
list size: 10000 elapsed milliseconds: 6
queue size: 10000 elapsed milliseconds: 0
vector size: 20000 elapsed milliseconds: 68
list size: 20000 elapsed milliseconds: 17
queue size: 20000 elapsed milliseconds: 3
vector size: 30000 elapsed milliseconds: 128
list size: 30000 elapsed milliseconds: 19
queue size: 30000 elapsed milliseconds: 3
vector size: 40000 elapsed milliseconds: 138
list size: 40000 elapsed milliseconds: 13
queue size: 40000 elapsed milliseconds: 3
vector size: 50000 elapsed milliseconds: 221
list size: 50000 elapsed milliseconds: 19
queue size: 50000 elapsed milliseconds: 2
vector size: 60000 elapsed milliseconds: 328
list size: 60000 elapsed milliseconds: 20
queue size: 60000 elapsed milliseconds: 3
vector size: 70000 elapsed milliseconds: 302
list size: 70000 elapsed milliseconds: 27
queue size: 70000 elapsed milliseconds: 4
vector size: 80000 elapsed milliseconds: 407
list size: 80000 elapsed milliseconds: 24
queue size: 80000 elapsed milliseconds: 7
vector size: 90000 elapsed milliseconds: 568
list size: 90000 elapsed milliseconds: 28
queue size: 90000 elapsed milliseconds: 5
vector size: 100000 elapsed milliseconds: 736
list size: 100000 elapsed milliseconds: 48
queue size: 100000 elapsed milliseconds: 7
컴퓨터:
Intel Pentium 4405U, 램 8G(언제바꾸냐???)
얼마전에 이중진자 시뮬레이션 만들면서 자료 구조에 대한 생각을 좀 해봤는데 벡터는 후입선출 구조에는 느려서 제대로 대응할 수 없을 것 같아서 리스트를 썼다.
오늘 실험해보니 역시나 느렸다.
근데 리스트로 예측선 찍는 건 좀 복잡할듯 하다.
만들어서 쓰던가 해야겠다.
댓글