我进行了一项有趣的测试,测试对象为boost vector和std vector,如下所示
int N = 10000;
{
boost::timer::auto_cpu_timer t;
std::vector<int> v;
for (int i = 0; i < N; ++i)
{
v.insert(v.begin(), i);
}
}
{
boost::timer::auto_cpu_timer t;
boost::container::vector<int> v;
for (int i = 0; i < N; ++i)
{
v.insert(v.begin(), i);
}
}
win32版本,使用vc2010编译,/O2 /Oy-选项
当N = 10000时:
使用std vector:0.140849秒(墙上时间),0.140401秒用户时间 + 0.000000秒系统时间= 0.140401秒CPU时间(99.7%)
使用boost vector:0.056174秒(墙上时间),0.062400秒用户时间+ 0.000000秒系统时间 = 0.062400秒CPU时间(111.1%)
当N = 100,000时:
std:14.050757秒(墙上时间),14.055690秒用户时间+ 0.000000秒系统时间= 14.055690秒CPU时间(100.0%)
boost:5.585048秒(墙上时间),5.584836秒用户时间+ 0.000000秒系统时间= 5.584836秒CPU时间(100.0%)
向两个vector都添加reserve(N)后,CPU时间变化不大。
它们之间有什么区别吗?Boost比std快得多,原因是什么?谢谢。
检查sizeof(),std::vector为16,而boost::container::vector为12。
N
个条目了吗? - Sergey Kalinichenkov.reserve(N)
后,再次尝试进行测试。 - Praetorian