【发布时间】:2012-07-29 03:36:37
【问题描述】:
我正在将 C++ 算法转换为 C#。 我遇到了这个 for 循环:
for (u = b.size(), v = b.back(); u--; v = p[v])
b[u] = v;
它在 C++ 中没有错误,但在 C# 中会出现错误(无法将 int 转换为 bool)。 这个for循环我实在想不通,条件在哪里?
谁能解释一下?
PS。只是为了检查,使 VECTOR 适应 LIST 确实 b.back() 相当于 b[b.Count-1] ?
【问题讨论】:
-
条件在哪里?那将是
u--。分号用于分隔for语句的各个部分。 -
这是一个很正常的循环。 C# 不会将数字隐式转换为布尔值,因此您需要将条件转换为
; u-- != 0; -
@Jessie Good——好的代码与语言允许的内容无关,它与不熟悉的同事阅读代码所需的时间有关。如果它引起任何混乱,即使它是合法的,它也不是最好的解决方案。通常,更冗长的解决方案比简洁的解决方案要好得多,并且大多数编译器都会以任何一种方式编译成相同的东西。
-
我希望,在转换代码之后,你给变量起一个比
b、u、v等更好的名字。他们这样命名的唯一原因是因为有人想要通过使他们的代码不可读来看起来很聪明。 -
@houbysoft:这是一个一般的 stackoverflow 问题。如果你在一个特定的研究领域提出一个非常详细、经过充分研究和有趣的问题,这会导致一个棘手而有趣的问题的解决方案,并且在经过几天的艰苦研究后回答这样一个问题,你只会得到几个十几位参观者和该领域的几位专家的一两个赞成票。如果您想快速获得大量代表,您必须提出并回答此类问题。 “我如何在 php 中添加两个数字”、“
do在 C++ 中的含义” - 将获得成千上万寻找教程的初学者的点击。