我是新用的C ++,我需要将一些信息或值从一个案例传递到同一个案例中的另一个案例。
这就像我有切换的东西,我命名案例1和案例2.在案例1中,我将使用用户将要给我的变量进行一些数学运算。就像输入是5我将要添加6,然后将是11.并且在情况2我需要该信息,我需要案例1已经计算的金额。但我不知道该怎么做。我不想在另一台交换机内使用交换机,如果它有效,则为idk,但我不能使用它。谢谢。
我将假设您对此问题的动机要么是要避免编写冗余/重复代码,要么是希望通过多次执行相同的数学运算来最小化CPU周期。下面描述的技术试图解决这两个问题。
第一个问题是:您的代码是否应该一个接一个地执行这两个案例?如果是这样,你可以使用switch语句的“fall through”功能来做到这一点,也就是说,通过在第一种情况结束时省略break;
语句,你可以立即让程序的执行“落到”下一个案例中在第一个案例执行后,像这样:
int x = 5;
switch(someVariable)
{
case 1:
x += 6;
// fall through!
case 2:
cout << "x=" << x << endl;
break;
}
或许你想要更传统的模式,每个case
最后都有一个break;
,你只想执行其中一个案例。在那种情况下,这样做......
int addSix(int x) {return x+6;} // helper function
[...]
int x = 5;
switch(someVariable)
{
case 1:
cout << "x=" << addSix(x) << endl;
break;
case 2:
cout << "y=" << addSix(x) << endl;
break;
}
...避免编写冗余代码的需要(即你只需要在一个位置编写addSix(int)
中的代码),但它确实意味着每次执行switch语句时都会执行addSix(int)
中的代码。对于那些很好的琐碎计算,但是如果你的计算计算成本非常高,那么你想尽可能避免多次执行它们呢?为此,您可以使用一种称为memoization的技术,它实际上只是将计算结果存储在一个变量中,另外在您第一次执行计算时设置一个标志,以便您记住下次不执行此操作:
void doReallyExpensiveCalculationOnce(int & x, bool & isCalculationValid)
{
if (isCalculationValid == false)
{
x += 6; // pretend this operation is really slow/expensive
isCalculationValid = true; // remember we already did the calculation
}
}
bool isCalculationValid = false;
int x = 5;
for (int i=0; i<1000000; i++)
{
switch(someVariable)
{
case 1:
doReallyExpensiveCalculationOnce(x, isCalculationValid);
cout << "x=" << x << endl;
break;
case 2:
doReallyExpensiveCalculationOnce(x, isCalculationValid);
cout << "y=" << x << endl;
break;
}
}
请注意,即使上面的for循环导致switch语句执行1000000次,更新x
值的真正昂贵的计算也只执行(最多)一次。