注意在一些循环中可以用到的提升程序性能的方法,并且避免一些不必要的内存访问。
#include<iostream>
using namespace std;
//实现一个功能:更新数组元素,更新值为此位置及前面元素之和。
//方法1
void test01(int *arr,int *sum,int len) {
sum[0]=arr[0];
for(int i=1;i<len;i++) {
sum[i]=sum[i-1]+arr[i];
}
}
//方法2,减少循环的次数,即充分利用每次循环所具备的资源
void test02(int *arr,int *sum,int len) {
sum[0]=arr[0];
//关于跳出边界的判断卡住最坏的情况:i=len-1-1的时候必须跳出来,因为循环中有arr[i+1],不然会越界
int i;
for(i=1;i<len-1;i+=2) {
sum[i]=sum[i-1]+arr[i];
sum[i+1]=sum[i]+arr[i+1];
}
if(i<len)
sum[i]=sum[i-1]+arr[i];
}
//减少不必要的内存访问
//方法1
void test03(int *arr,int *sum2,int len) {
for(int i=0;i<len;i++) {
//这是一个很低效的代码,因为每次循环都要访问内存,而最后只是要一个结果,完全没有必要
*sum2+=arr[i];//求数组的累积和
}
}
//方法2
void test04(int *arr,int *sum2,int len) {
int temp=0;
for(int i=0;i<len;i++) {
//用一个临时变量存放每次循环计算结果,省去对内存的访问
temp+=arr[i];//求数组的累积和
}
*sum2=temp;
}
int main()
{
int arr[5]={1,2,3,4,5};
int sum[5];
//test01(arr,sum,5);//1 3 6 10 15
test02(arr,sum,5);//1 3 6 10 15
//输出数组元素
// for(int i=0;i<5;i++)
// cout<<sum[i]<<" ";
int sum2=0;
//test03(arr,&sum2,5);//15
test04(arr,&sum2,5);//15
cout<<sum2;
return 0;
}