c++数组和 vector访问执行性能比较
最近在刷leetcode时,发现对一组数据频繁操作,数组的效率比 vector快很多,让习惯用vector的我着实有点懵,于是做了一下实验windows上执行首先,我在win10上用vs2015,将数组和vector分别对数组进行10万次操作,结果很明显。下面是运行代码:#include<iostream>#include<windows.h>#include< ve
·
最近在刷leetcode时,发现对一组数据频繁操作,数组的效率比 vector快很多,让习惯用vector的我着实有点懵,于是做了一下实验
windows上执行
首先,我在win10上用vs2015,将数组和vector分别对数组进行10万次操作,结果很明显。
下面是运行代码:
#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万,结果是:
调到1000万:
windows上执行,次数越大,差距越大,可能跟编译环境和电脑配置有关。
linux上执行
下面, 我们再linux上进行操作,结果如下:
对数组和vector分别执行1000万:
再调到1亿次:
可能是云服务器,比较强大的原因,差距并不是很明显.
运行代码如下:
#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
linux环境下测试:
代码如下:
#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[10000000000];
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 << "int[] 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;
int *arr3 = (int *) new int[10000];
start_time1 = getTime();
for (int i = 0; i < 100000000; i++) {
arr3[i % 10000]++;
// if(vect[i%9]) temp++;
}
end_time1 = getTime();
std::cout << "new int[] run time is " << (end_time1 - start_time1) << "ms." << endl;
return 0;
}
总结
由上可见,在对数据进行频繁访问执行操作时,数组比vector优秀很多。
但是,这不是说数组一定比vector好,vector拥有很多强大的功能,可以存储很多种类型,相比之下数组还是太单一了点,如果只是对一组数据进行简单的频繁访问执行操作,可以c++数组,否则大多数情况都还是使用c++的vector。
更多推荐
所有评论(0)