c++数组和 vector访问执行性能比较

最近在刷leetcode时,发现对一组数据频繁操作,数组的效率比 vector快很多,让习惯用vector的我着实有点懵,于是做了一下实验

windows上执行

首先,我在win10上用vs2015,将数组和vector分别对数组进行10万次操作,结果很明显。
数组和vector效率比较
下面是运行代码:


#include<iostream>
#include<windows.h>
#include< vector >
#include< algorithm >
#include< string >
using namespace std;
int main()
{
    
    
	DWORD start_time2 = GetTickCount();
	int arr2[10000];
	for (int i = 0; i < 100000; i++) {
    
    
		//if(arr2[i% 10]);
		arr2[i % 10000]++;
	}
	DWORD end_time2 = GetTickCount();
	cout << "array run time is " << (end_time2 - start_time2) << "ms." << endl;

	DWORD start_time1 = GetTickCount(); 
	vector<int> vect(10000);
	for (int i = 0; i < 100000; i++) {
    
    
		vect[i % 10000]++;
		//if(vect[i % 10000]);
	}
	DWORD end_time1 = GetTickCount(); 
	cout << "vector run time is " << (end_time1 - start_time1) << "ms." << endl;
	system("pause");
	return 0;
}

耗时的主要方面是访问速度,可以把循环中的计算改为访问(注释有),结果也是差不多。

我们把数据调到100万,结果是:
数组和vector效率比较

调到1000万
数组和vector效率比较

windows上执行,次数越大,差距越大,可能跟编译环境和电脑配置有关。

linux上执行

下面, 我们再linux上进行操作,结果如下:
对数组和vector分别执行1000万
数组和vector效率比较
再调到1亿次:
数组和vector效率比较
可能是云服务器,比较强大的原因,差距并不是很明显.
运行代码如下:

#include<iostream>
#include<windows.h>
//#include< algorithm >
#include <vector>
#include <stdlib.h>
#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
using namespace std;

int getTime(){
    
    
    struct timeval tv;
    gettimeofday(&tv,NULL);
	return tv.tv_sec*1000 + tv.tv_usec/1000;
}
int main()
{
    
    
	int temp;
	int arr2[10000];
	int start_time2 = getTime(); 
	for (int i = 0; i < 100000000; i++) {
    
    
		arr2[i % 10000]++;
		// if (arr2[i % 9]) temp++;

	}
	int end_time2 = getTime(); 
	std::cout << "array run time is " << (end_time2 - start_time2) << "ms." << endl;

    vector<int> vect(10000);
	int start_time1 = getTime(); 
	for (int i = 0; i < 100000000; i++) {
    
    
		vect[i % 10000]++;
		// if(vect[i%9]) temp++;

	}
	int end_time1 = getTime(); 
	std::cout << "vector run time is " << (end_time1 - start_time1) << "ms." << endl;


   return 0;
}

总结

由上可见,在对数据进行频繁访问执行操作时,数组比vector优秀很多。
但是,这不是说数组一定比vector好,vector拥有很多强大的功能,可以存储很多种类型,相比之下数组还是太单一了点,如果只是对一组数据进行简单的频繁访问执行操作,可以c++数组,否则大多数情况都还是使用c++的vector。

猜你喜欢

转载自blog.csdn.net/h799710/article/details/107544792
今日推荐