多重if不带else不等价于if else?c++
multiple if without else not equivalent to if else? c++
尝试按升序对0,1,2的向量进行排序。我认为以下两个是等价的:
void sortColors(vector<int>& nums) {
int i=0,j=nums.size()-1;
int k=0;
while (k<=j){
if (nums[k]==0){
swap(nums[i],nums[k]);
++i;
++k;
}
else if (nums[k]==1) {
++k;
}
else if (nums[k]==2){
swap(nums[j],nums[k]);
--j;
}
}
}
和
void sortColors(vector<int>& nums) {
int i=0,j=nums.size()-1;
int k=0;
while (k<=j){
if (nums[k]==0){
swap(nums[i],nums[k]);
++i;
++k;
}
if (nums[k]==1) ++k;
if (nums[k]==2){
swap(nums[j],nums[k]);
--j;
}
}
}
然而,只有第一个是正确的。当测试运行nums={2,0}时,第一个函数执行正确的排序,而第二个函数不执行任何操作。这里有什么区别?
不,它们不一样,因为您更改了用于条件的变量:
while (k<=j){
if (nums[k]==0){
swap(nums[i],nums[k]);
++i;
++k;
}
if (nums[k]==1) ++k; // if num[k] == 1
if (nums[k]==2){ // now k isnt
// the same as for the last condition
swap(nums[j],nums[k]);
--j;
}
}
而对于CCD_ 1版本,仅执行其中一个分支。
输出中确实存在差异,但这不是您需要知道的。你需要知道的是:
多个if语句意味着每个if块都有机会被执行。因此,如果您有N个条件,那么将执行0到N个块。
int a = 0;
if(a == 0)
a++;
if(a == 1)
a++;
if(a == 2)
a++;
if(a == 3)
a++;
所有这些都将执行,a将为4。
单行if/else-if/else语句意味着每次使用它们时,只有一个块会执行。所以,如果你有N个条件,那么这些块中只有一个会执行。
int a = 20;
if(a == 0)
a++;
else if(a == 1)
a++;
else if(a == 2)
a++;
else
a = 0;
只有else块将执行,因此a将为0
最后,一行if/else-if语句表示将执行AT MOST一个块。它们都有可能不会执行,因为你没有最终的else语句来捕捉"其他一切"。所以,如果你有N个条件,那么这些块中的0或1将被执行。
int a = 20;
if(a == 0)
a++;
else if(a == 1)
a++;
else if(a == 2)
a++;
else if(a == 3)
a++;
这些都不执行,所以a保持20
不,它们不等价。因为第二个if()
将在第一个if之后执行,所以如果在第一个if内部更改了k,它可能会激发。else if
永远不会发生这种情况,因为如果第一个if
激发,else
永远不会激发。
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 如何删除peer if else分支中的冗长句子
- 我似乎对if/else的基本语句有问题:/
- 使用if-else将数字转换为单词
- 为什么这个案例陈述需要一个"if else"而不仅仅是一个"if"?
- C++ If/Else 语句被跳过
- 如果条件不相关,我应该更喜欢两个 if 语句而不是 if-else 语句吗?
- 如何将 if else 语句重写为 switch 语句
- 在 C++ 中的 if-else if- else 语句期间更改变量
- 为什么我的 if else 语句不起作用并从数组中输出正确的索引?
- 我的 If Else 语句无法在向量 (C++) 中提供最大值
- 具有嵌套 if-else 的循环的时间复杂度
- 为什么无论输入如何,所有 if-else 语句都会打印?
- 简化对两个布尔值的 4 个 if/else 检查
- 如何在C++中创建 if else 循环而不是多个嵌套?
- 为什么切换 if else 语句的顺序会导致错误?
- 如何使用 if else 语句
- if/else 语句输出由于加号或减号而未显示正确的消息
- 如何解释 #if/#else 位域?(VC++菜鸟)
- if-else 语句仅按特定顺序工作,我不知道为什么