c++ - 条件运算符不允许程序终止
问题描述
我刚刚了解了条件运算符,并且正在做一个介绍性练习,说明:
编写一个程序,使用条件运算符查找 a
vector<int>
中具有奇数值的元素,并将每个此类元素的值加倍。
这是我写的代码:
int main()
{
vector<int> nums = { 1,2,3,4,5,6,7,8,9 };
int i;
auto beg = nums.begin();
while (*beg > 0) // This will always evaluate to true.
{
((*beg) % 2 == 0 && (beg < nums.end()) ? i = 0 : *beg = 2 * (*(beg++)));
/*If the number is even the program will just assign 0 to i*/
}
}
如果您将最后一行更改为:程序终止并为您提供正确的输出:
((*beg)%2 == 0 && (beg < nums.end()) ? i = 0 : *beg = 2*(*(beg)));
++beg;
为什么会这样?
解决方案
它卡住了,因为如果条件((*beg)%2 == 0 && (beg < nums.end())
是true
,迭代器将不会增加以进行进一步检查。你只有设置i=0
。您也应该增加迭代器。
您可以为此使用逗号运算符:
while (beg != nums.end() && *beg > 0)
{
(*beg) % 2 == 0 ? (beg++, i): (*beg = 2 * (*beg) , beg++, ++i );
}
另请注意,计数i
应事先初始化,而不是在while
循环中。根据要求的完整工作代码将是:
#include <iostream>
#include <vector>
int main()
{
std::vector<int> nums = { 1,2,3,4,5,6,7,8,9 };
int i{0};
auto beg = nums.begin();
while (beg != nums.end() && *beg > 0)
{
(*beg) % 2 == 0 ? (beg++, i): (*beg = 2 * (*beg) , beg++, ++i );
}
for (const int ele : nums)
std::cout << ele << " ";
std::cout << "\ncount: " << i << "\n";
}
输出:
2 2 6 4 10 6 14 8 18
count: 5
话虽如此,IMO 使用逗号运算符和上述条件运算符(任务)并不是一种好的编码方式,这只会让您的代码库的未来读者感到困惑。
推荐阅读
- qt - 找不到让图形输入板驱动程序在 mint 上工作的方法
- selenium - 如何在空手道配置文件中设置代理
- r - 在多个数据框行中使用数字拆分对象的递归
- c# - '任务
' 不包含 'LastActive' 的定义 - mysql - MYSQLDUMP - 与本地主机断开连接
- string - 如何将字符串评估为表达式以在 Rust 中对字符串执行算术运算,以便当用户在控制台上键入 3 + 1 时,它会给出 4
- sql - 如何将一些贷款与等额结果的贷款相匹配?
- unit-testing - 从 2 个不同的文件模拟 2 个类
- python - 在python中合并多个表后更改重复的列名
- architecture - 记录签名时间戳