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

2025-07-29 09:25:05

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

windows上执行

首先,我在win10上用vs2015,将数组和vector分别对数组进行10万次操作,结果很明显。

下面是运行代码:

#include

#include

#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 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

////#include

//#include< algorithm >

#include

#include

#include

#include

#include

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 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

// #include

//#include< algorithm >

#include

#include

#include

#include

#include

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 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。