在一行代码中理解 index++
Understanding index++ in single line of code
这是合并排序实现的代码片段的一部分,我很难理解这一行:
b[bIdx++] = (a[left] <= a[right]) ? a[left++] : a[right++];
我正在重写上面的片段以检查我对这条线的理解。我对上述行的理解是否正确?
if (a[left] <= a[right]){
b[bIdx] = a[left];
left++;
}
else {
b[bIdx] = a[right];
right++;
}
bIdx ++;
你的理解是正确的。
后缀递增运算符++
计算为其操作数的当前值,并作为副作用递增其操作数。 增量的效果保证在下一个序列点可见。
序列点出现在每个语句之后,但它可能出现在基于运算符的表达式中。 创建序列点的运算符示例包括逻辑 AND 运算符&&
、逻辑 OR 运算符||
、逗号运算符,
,以及三元运算符?:
。
分解单行语句,首先评估条件a[left] <= a[right]
。 现在,在评估的这一阶段有一个序列点。 根据此条件的结果,评估a[left++]
或a[right++]
,并将评估的变量分配给b[bIdx++]
。 语句末尾有一个序列点,此时bIdx
递增,left
或right
递增。
以上反映在代码的多语句版本中。 首先评估条件,然后b[bIdx]
分配a[left]
或a[right]
,然后递增left
或right
,然后递增bIdx
。
您重写的代码等效于上面的一行代码。
单行使用后缀增量运算符,其中计算表达式的值,即a[left]
的计算值为left
,之后操作数left
递增 1。
另请注意,还存在一个前缀递增运算符,其中操作数递增 1,之后计算表达式的值。
我对上述行的理解是否正确?
正确。
我们将消除疑虑,确保
if (a[left] <= a[right]){
b[bIdx] = a[left];
++left;
}
else {
b[bIdx] = a[right];
++right;
}
++bIdx;
其他空间(例如上面的(用于填充代码,如果您有更多条件,例如
b[bIdx++] = (a[left] < a[right]) ? a[left++] : ( a[left++] == a[right] ? (++right, 1) : a[right++] );
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 在一行代码中理解 index++
- 代码中的"vector<<int>vector>&index"是什么意思?
- Matlab 编码器错误 "for loop index expressions.." 如何修改代码?