以下两个代码段中哪个更快?假设编译器没有进行任何优化。
C
/* FIRST */
for(i=0;i<10;i++)
for(j=0;j<100;j++)
//do something
C
/* SECOND */
for(i=0;i<100;i++)
for(j=0;j<10;j++)
//do something
CPP
//program to count number of increment
//operations in FIRST and SECOND
#include
using namespace std;
int main()
{
int c1 = 0, c2 = 0;
/* FIRST */
for(int i=0;i<10;i++,c1++)
for(int j=0;j<100;j++, c1++);
/* SECOND */
for(int i=0; i<100; i++, c2++)
for(int j=0; j<10; j++, c2++);
cout << " Count in FIRST = " <
CPP
//program to count the number of comparison
//operations executed by FIRST and SECOND */
#include
using namespace std;
int main()
{
int c1 = 0, c2 = 0;
/* FIRST */
for(int i=0; ++c1&&i<10; i++)
for(int j=0; ++c1&&j<100;j++);
/* SECOND */
for(int i=0; ++c2&&i<100; i++)
for(int j=0; ++c2&&j<10; j++);
cout << " Count fot FIRST " <
C
/* SECOND */
for(i=0;i<100;i++)
for(j=0;j<10;j++)
//do something
两个代码段提供相同的功能,并且两个for循环内的代码在两个代码段中将执行相同的次数。
如果我们仔细观察,可以发现SECOND比FIRST执行更多的操作。与FIRST的相应部分相比,它执行for循环的所有三个部分(赋值,比较和增量)的次数更多:
- 第二个执行分配操作(j = 0或i = 0)101次,而第一个仅执行11次。
- 第二个进行101 + 1100个比较(i <100或j <10),而第一个进行11 + 1010个比较(i <10或j <100)。
- 第二个执行1100个增量运算(i ++或j ++),而第一个执行1010个增量运算。
下面的C++代码对在FIRST和SECOND中执行的增量操作的数量进行计数,并打印计数。
CPP
//program to count number of increment
//operations in FIRST and SECOND
#include
using namespace std;
int main()
{
int c1 = 0, c2 = 0;
/* FIRST */
for(int i=0;i<10;i++,c1++)
for(int j=0;j<100;j++, c1++);
/* SECOND */
for(int i=0; i<100; i++, c2++)
for(int j=0; j<10; j++, c2++);
cout << " Count in FIRST = " <
输出:
Count in FIRST = 1010
Count in SECOND = 1100
下面的C++代码计算了FIRST和SECOND执行的比较操作的数量
CPP
//program to count the number of comparison
//operations executed by FIRST and SECOND */
#include
using namespace std;
int main()
{
int c1 = 0, c2 = 0;
/* FIRST */
for(int i=0; ++c1&&i<10; i++)
for(int j=0; ++c1&&j<100;j++);
/* SECOND */
for(int i=0; ++c2&&i<100; i++)
for(int j=0; ++c2&&j<10; j++);
cout << " Count fot FIRST " <
输出:
Count fot FIRST 1021
Count fot SECOND 1201
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。