Bba*_*one -3 c++ performance stdvector c++11
我编写了以下代码,以测量1000k不使用保留和保留的情况下推回整数时间所花费的时间。结果不是我想要的。
所有测试均在我的Samsung ativtap7上执行,该处理器具有在Windows 10下运行的核心i5 @ 1.8 Ghz处理器,4 GB RAM和VS2018 C ++编译器。
#include <iostream>
#include <vector>
#include "Stopwatch.h"
using namespace std;
int main()
{
Stopwatch myWatch;
//pushback 1000k times without reserve
for (int i = 0; i < 10; i++)
{
cout << "try " << i + 1 << endl;
myWatch.Start();
vector<int> vec1;
for (int i = 0; i < 1000000; i++)
{
vec1.push_back(i);
}
myWatch.End();
myWatch.LookElapsedTime();
//pushback 1000k times with reserve
myWatch.Start();
vector<int> vec2(1000000);
for (int i = 0; i < 1000000; i++)
{
vec2.push_back(i);
}
myWatch.End();
myWatch.LookElapsedTime();
cout << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我期望结果显示出使用储备金和不使用储备金之间的有意义的区别,但是实际结果与我的预期不符。
以下是结果。
try 1
1.51118(sec)
1.46981(sec)
try 2
1.43074(sec)
1.4381(sec)
try 3
1.4428(sec)
1.46196(sec)
try 4
1.41903(sec)
1.43688(sec)
try 5
1.47544(sec)
1.558(sec)
try 6
1.47474(sec)
1.45484(sec)
try 7
1.47731(sec)
1.5908(sec)
try 8
1.77192(sec)
1.72018(sec)
try 9
1.56832(sec)
1.447(sec)
try 10
1.43659(sec)
1.43572(sec)
Run Code Online (Sandbox Code Playgroud)
我想知道为什么会这样。
JeJ*_*eJo 14
您根本没有保留内存。在第二个向量中
vector<int> vec2(1000000);
Run Code Online (Sandbox Code Playgroud)
这意味着使用分配和初始化1000000整数0。您需要
vector<int> vec2;
vec2.reserve(1000000);
Run Code Online (Sandbox Code Playgroud)
查看使用quick-bench.com完成的基准测试。现在很清楚,保留很重要。
(见在线)
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |