【发布时间】:2010-12-28 06:45:40
【问题描述】:
我在这里有两个程序,它们都在做完全相同的任务。他们只是将布尔数组/向量设置为真值。使用向量的程序 运行需要 27 秒,而涉及大小为 5 倍的数组的程序需要不到 1 秒。我想知道为什么会有如此大的差异的确切原因?是向量 真的那么低效吗?
使用向量编程
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
int main(){
const int size = 2000;
time_t start, end;
time(&start);
vector<bool> v(size);
for(int i = 0; i < size; i++){
for(int j = 0; j < size; j++){
v[i] = true;
}
}
time(&end);
cout<<difftime(end, start)<<" seconds."<<endl;
}
运行时间 - 27 秒
使用数组编程
#include <iostream>
#include <ctime>
using namespace std;
int main(){
const int size = 10000; // 5 times more size
time_t start, end;
time(&start);
bool v[size];
for(int i = 0; i < size; i++){
for(int j = 0; j < size; j++){
v[i] = true;
}
}
time(&end);
cout<<difftime(end, start)<<" seconds."<<endl;
}
运行时间 -
平台 - Visual Studio 2008 操作系统 - Windows Vista 32 位 SP 1 处理器 Intel(R) Pentium(R) 双 CPU T2370 @ 1.73GHz 内存 (RAM) 1.00 GB
谢谢
亲爱的
【问题讨论】:
-
std::vector
不是容器。阅读:gotw.ca/publications/mill09.htm -
重要提示:即使您得出正确的结论,但您并没有进行正确的比较。您执行最内层循环的 N^2 次迭代(
v[i] = true语句),但 N 在一个测试中为 2000,在另一个测试中为 10000,因此您实际上做了 25 倍的工作,而不是 5 倍从vector和普通数组之间的区别。这实际上使差异更加明显。 -
@user235022 你的意思是
v[j] = true;而不是v[i] = true?否则编译器优化内部循环输出应该非常简单,因为您的操作不依赖于循环变量。
标签: c++ arrays time vector performance