假定循环内用时较多,fun1比fun2快多少

运行环境:WinXP VS2005(VC8)

#include <iostream>

using namespace std ;

#include <time.h>

#define WAN (10000)

const int iNum = WAN*300;

void fun1(int* p)

{

for( int i = 0 ; i < iNum ; i++ )

{

p[i] = i;

}

}

void fun2(int* p)

{

for( int i = 0 ; i < iNum ; i+= 4  )

{

p[i] = i;

p[i+1] = i+1;

p[i+2] = i+2;

p[i+3] = i+3 ;

}

}

void Test()

{

int * p = new int[iNum];

long x1 = clock();

fun1(p);

long x2 = clock();

fun2(p);

long x3 = clock();

cout << (x2-x1) << "豪秒 " << (x3-x2) << "豪秒" << endl;

delete [] p ;

}

void main()

{

Test();

Test();

Test();

Test();

Test();

}

循环次数(iNum )由3亿改到300万次,fun1快约16毫秒。约快50%

47豪秒 31豪秒

47豪秒 31豪秒

47豪秒 31豪秒

47豪秒 31豪秒

47豪秒 31豪秒

把fun1,fun2的用时改多些

#include <iostream>

using namespace std ;

#include <time.h>

#include <math.h>

#define WAN (10000)

const int iNum = WAN*300;

#define NN(n) (pow((float)n,100))

void fun1(int* p)

{

for( int i = 0 ; i < iNum ; i++ )

{

p[i] = NN(i);

}

}

void fun2(int* p)

{

for( int i = 0 ; i < iNum ; i+= 4  )

{

p[i] = NN(i);

p[i+1] = NN(i+1);

p[i+2] = NN(i+2);

p[i+3] = NN(i+3) ;

}

}

void Test()

{

int * p = new int[iNum];

long x1 = clock();

fun1(p);

long x2 = clock();

fun2(p);

long x3 = clock();

cout << (x2-x1) << "豪秒 " << (x3-x2) << "豪秒" << endl;

delete [] p ;

}

void main()

{

Test();

Test();

Test();

Test();

Test();

}

11781豪秒 12203豪秒

11922豪秒 11921豪秒

12219豪秒 11688豪秒

11625豪秒 11641豪秒

11703豪秒 11734豪秒

结论:用时基本相同

时间: 2024-10-19 17:04:26

假定循环内用时较多,fun1比fun2快多少的相关文章

ios给NSMutableDictionary循环赋值的两种方式,在循环内初始化NSMutableDictionary和在循环外初始化NSMutableDictionary有何区别?(已解决)

NSMutableArray * arrayName = [NSMutableArray array]; NSMutableArray * array = [NSMutableArray array]; [array removeAllObjects]; for (int i = 0; i< 10; i++) { NSString * str = [NSString stringWithFormat:@"name%i",i]; [arrayName addObject:str];

C++在循环内和循环外定义变量的差异(如何写出高效的for循环)

写这篇文章的原因是我在问答平台看到的一个问题: C++内层循环中定义变量和在外面定义比影响大吗? 问题来自:http://ask.csdn.net/questions/176270 例如: for(int i=0;i<999;i++) { for(int j=0;j<999;j++); } 内层循环每次都定义j会造成多大的消耗呢? 此处我给出的回答是: 这个需要看你具体用什么编译器.不过主流编译器(如vs和gcc)这一块优化都比较好,不会反复分配变量. 看到答案和评论,好像有很多人对这个感兴趣

try-catch遇到循环时,将try代码块放在循环内还是循环外的选择

当循环内的代码出现异常,需要结束循环时,将try代码块放在循环外; 当循环内的代码出现异常,需要继续执行循环时,将try代码块放在循环内. public static void main(String[] args) { int runs = 3; //循环运行次数 //try代码块在循环外 try { for (int i = 0; i < runs; i++) { if (i == 0) { throw new RuntimeException("try在循环外时,出现运行异常&quo

for循环内变量定义问题

在C99之前的编译器,不支持括号内进行定义变量 2.在C++中是允许定义变量的,其c99之后的编译器亦可以在括号内进行声明变量. #include<stdio.h>//c++可以编译,但是c不能编译 int main() { int sum=0; for(int i=0;i<=100;++i)//定义并初始化变量i=0.实际编译器运行不起来.但把int i=0拿到for循环外部(如下黑体加粗部分)就可以. { sum+=i; } printf("%d",sum); r

C# 使用IEnumerable,yield 返回结果,同时使用foreach时,在循环内修改变量的值无效

在项目中遇到了一个比较奇怪的问题,在foreach循环中修改列表的值后没有生效,后面使用时还是获取列表时的值,原因是因为使用了 yield return .下面让我们来探究下其中的原因: 首先来看下 yield return 官方的解释 使用 yield return 语句可一次返回一个元素.通过 foreach 语句或 LINQ 查询来使用迭代器方法. foreach 循环的每次迭代都会调用迭代器方法. 迭代器方法运行到 yield return 语句时,会返回一个 expression,并保

Python之for in 与while 在循环内赋值的区别

1 level = 3 2 for each_item in range(level): 3 level += 1 4 print(233) 输出效果如下: 1 233 2 233 3 233 这不会陷入一个死循环,也就是range(level)内的值在循环是已经固定了.但是level的值是会变化的. 1 while level < 7: 2 level += 1 3 print(233) 但是如果在while循环中,值是会变化的. 原文地址:https://www.cnblogs.com/TY

c#变量在for循环内声明与外的区别

1.这样写是错误的 #region 有这样的一个字符串类型的数组{"老杨","老苏","老马","老牛"};要求 变换成这样一个字符串:老杨|老苏|老马|老牛 string[] str = { "老杨", "老苏", "老马", "老牛" }; for (int i = 0; i < str.Length - 1; i++) { string

ajax循环调用时,只返回最后一次的值,后台执行最后一次数据

1. 代码:var i;for(i=0;i<10;i++){      ajaxServise(i);} 在for循环中调用ajax方法  补充页面上的数据,这样写是错误的,他不会每执行一次for循环就执行一次ajax方法,而是等for循环结束才去执行ajax方法,所以导致ajax只被执行一次.然而当修改如下: for(i=0;i<10;i++){      alert("aa");      ajaxServise(i);}与上面不同的是在每次调用的时候都弹出一个窗体 

SQL 在循环内修改字段值

在网站找一段,发现并没有达到自己的要求: 这段程序功能是 为某空字段自动编号(系统运用时,新加的编号字段,前期有数据,需要重新编号) declare @id int declare @maxid int set @id=1 select @maxid=count(*) from t_Send_Revisit Where fSO is null begin while @id<[email protected] begin update s set fSO =(Select 'SR' +CONVE