注意在一些循环中可以用到的提升程序性能的方法,并且避免一些不必要的内存访问。
#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; }