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

  • 16
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值