【发布时间】:2013-07-03 15:13:44
【问题描述】:
我正在创建一个大小为 100 的数组和向量并生成一个随机值并尝试将数组和向量保持为已排序。 这是我的代码
vector<int> myVector;
int arr[SIZE];
clock_t start, finish;
int random;
for(int i=0; i<SIZE;i++)
{
myVector.push_back(0);
arr[i] = 0;
}
//testing for Array
start = clock();
for(int i=0; i<MAX;++i)
{
random = getRandom(); //returns rand() % 100
for(int j=0; j<SIZE;++j){
if(random > arr[j])
{
for(int k = SIZE - 1; k > j ; --k)
{
arr[k] = arr[k-1];
}
arr[j] = random;
break;
}
}
}
finish = clock();
cout << "Array Time " << finish - start << endl;
//Vector Processing
start = clock();
for(int i=0; i<MAX;++i)
{
random = getRandom(); //returns rand() % 100
for(int j=0; j<SIZE;++j){
if(random > myVector[j])
{
for(int k = SIZE - 1; k > j ; --k)
{
myVector[k] = myVector[k-1];
}
myVector[j] = random;
break;
}
}
}
finish = clock();
cout << "Vector Time " << finish - start << endl;
输出如下:
阵列时间:5
向量时间:83
在这种情况下,我无法理解为什么向量与数组相比如此缓慢? 这是否与优先选择向量而不是数组的经验法则相矛盾。
请帮忙!
【问题讨论】:
-
你做了哪些优化?使用优化编译器,结果应该几乎相同。
-
@HunterMcMillen,它必须连续存储在内存中。
-
如果你需要维护一个有序的容器,你为什么要使用其中一个?使用像
std::multiset这样的东西来保持自己的排序。 -
我建议,如果您要比较编译与最大优化和发布库的性能(一些实现为调试和生产提供不同的容器)。同样为了更可靠的比较,您应该预先生成所有随机数(将它们存储在数组/向量中,两次运行都相同)并在两个容器中运行它们(以便在两种情况下操作顺序相同)
标签: c++ performance optimization vector