一万个if..........else....语句,请问如何去优化它。。。。以提升性能效率

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一万个if..........else....语句,请问如何去优化它。。。。以提升性能效率相关的知识,希望对你有一定的参考价值。

我理解你的问题是嵌套的if else层次太深了,是吧?
如果是这样,考虑用数组把条件存起来,排好序,用二分查找找到满足的条件,然后根据函数指针调函数。每个分支做个函数。
也许好用。呵呵。1万次判断,比一次函数调用开销还是要大很多的。可以实测一下效果如何。
如果if。。。else 。。。是并列不相关的,就没辙了。
比如:
if。。。
else...
if...
else...追问

1万个嵌套,还有其他方法么

追答

能把嵌套的条件贴出来个十几行吗?看看到底是什么样的一万个嵌套条件。
也许能有针对性的解决方案。否则空对空找通用解决方案不容易解决问题。

参考技术A 用switch
case语句啊追问

还是不能从根本上解决问题啊。。。

if--else 嵌套 怎么理解?

嵌套的if-else语句
我们可以在if语句内嵌套if语句。同样,我们也可以在if语句内嵌套if-else语句,在if-else语句内嵌套if语句,以及在if-else语句内嵌套if-else语句。这种灵活性也很容易让人混淆程序,因此需要看几个示例。下面的示例是在if语句内嵌套if-else语句。

if(coffee == 'y')
if(donuts == 'y')
cout << "We have coffee and donuts.";
else
cout << "We havecoffee,but not donuts";
仅当coffee的测试结果返回true时,才执行对donuts的测试,因此输出消息反映的是每种情况下的正确状况,但这种嵌套结构很容易造成混淆。如果用不正确的缩进编写完全相同的代码,我们就可能陷入错误的结论:

if(coffee == 'y')
if(donuts == 'y')
cout << "We have coffee and donuts."; else // This else is indented incorrectly cout << "We have no coffee..."; // Wrong!
这里的错误还容易看出来,但在更复杂的if结构中,我们就需要记住关于哪个if拥有哪个else的规则。

注意:

else总是属于前面最近的、还没有对应else的if。

对于复杂的情形,我们都可以应用这条规则来处理。当编写程序时,使用大括号肯定能使代码更清楚。在上面所示的简单情形中,大括号实际上是不必要的,但我们也可以将该示例写成如下形式:

if(coffee == 'y')
if(donuts == 'y')
cout << "We have coffee and donuts.";
else cout << "We have coffee, but not donuts";

现在的程序应该是绝对清楚的。既然我们已经知道前面那条规则,就很容易理解在if-else语句内嵌套if的情形。

if(coffee == 'y')
if(donuts == 'y')
cout << "We have coffee and donuts.";

lse if(tea == 'y')
cout << "We have tea, but not coffee";
这里的大括号是必需的。如果将其省略,则else将属于对donuts进行测试的if。在这类情况下,通常很容易忘记添加大括号,从而产生难以发现的错误。包含这类错误的程序可以正确编译,有时候甚至还能产生正确的结果。

如果我们删除本示例中的大括号,则仅当coffee和donuts都等于'y'时(因此不执行if(tea = = 'y')测试)才能得到正确结果。

下面是在if-else语句内嵌套if-else语句的示例。这种结构即使只有一级嵌套,看起来也可能非常混乱。

if(coffee == 'y')
if(donuts == 'y')
cout << "We have coffee and donuts.";
else cout << "We have coffee, but not donuts";
else if(tea == 'y')
cout << "We have no coffee, but we have tea, and maybe donuts..."; else
cout << "No tea or coffee, but maybe donuts...";
即使有正确的缩进,该程序的逻辑也非常不明显。大括号不是必需的,因为前面学习的规则能够验证该程序的正确性,但如果加上大括号,该程序看起来将更加清楚。

if(coffee == 'y')
if(donuts == 'y')
cout << "We have coffee and donuts.";
else cout << "We have coffee, but not donuts";

else

if(tea == 'y')
cout << "We have no coffee, but we have tea, and maybe donuts..."; else
cout << "No tea or coffee, but maybe donuts...";
参考技术A 简单的说,if-else嵌套指if-else内部还有一个或者多个if-else语句,如:
if(a>0)

if(a<2)

c=3;

else
c=2;


else
c=1;

只有在判断了a>0之后,才会执行内部的if-else语句,简单来说,内部的if-else其实独立于外部的if-else,但必须外面if-else判断条件符合之后,才会执行嵌套的if-else语句。
参考技术B 就是在一个IF/ELSE语句里又包含了一个IF/ELSE语句
例如
if (x > 0)
printf("aa");
else
if (x < 0)
printf("bb");
else
printf("cc");
参考技术C if else里面在嵌套一个if else
if(条件不成立)
(执行)else if()(如果不成立) //在else有一个if 和 else的分支
(执行嵌套在else if的else)else
....

不知道是否说的明白,还是看上面那个小哥的吧

以上是关于一万个if..........else....语句,请问如何去优化它。。。。以提升性能效率的主要内容,如果未能解决你的问题,请参考以下文章

如何实践一万个小时异类天才理论?

Java 最常用类(前100名)来自一万个开源项目

中韩人寿爱心助力“一万个太阳”大型公益画展仙居展

Vmware12安装MacOS 10.11时遇到了问题,求大神解答,一万个万分感谢!!!

内存编址计算题--会一个题能做对一万个题

LinkedIn 是如何将 Hadoop YARN 集群扩展到超过一万个节点的