【问题标题】:C++ - a more efficient way to address a list inside loop argumentC++ - 一种更有效的方法来处理循环参数内的列表
【发布时间】:2013-03-21 12:50:31
【问题描述】:

正如标题所说。例如,您有一个值列表 char values[11] 并且您想在循环参数内循环遍历该列表:

while(something not in values[])
{
    doSomething(omgwtfbbq)
}

但当然它在 C++ 中不起作用……至少我是这么认为的。至少“not”关键字不存在。

谁能建议这是否有溶剂?

【问题讨论】:

  • 技术上not 不是关键字,而是C++ 中的保留标识符。但是,这种区别非常微妙。对于不允许您直接使用 not 的编译器,请尝试包含 <iso646.h> 标头(这样的编译器不符合标准,但是:标准 C++ 需要支持 not 而不使用该标头)
  • 我包含了 并尝试使用:while (something not in values[]) but not 被突出显示为未定义。虽然现在已经被认出来了。是的,我无法让它工作。到目前为止,我对 C++ 的了解还很有限。
  • 您确定需要while(something not in values[]) 而不是if(something not in values[])
  • ^ 我正在尝试在控制台应用程序中编写错误检查。所以逻辑,实际上需要一个循环:当用户没有从列表中输入值时 => 继续循环循环,直到输入一个可接受的值。但如果你碰巧提出了一个替代方案,没有使用上述方式,但效果相同,我很乐意接受。
  • while (std::find(&values[0], &values[11], something) == values[11]) {...}。如果您先说int *first = &values[0]; int *last = &values[11],则更具可读性,然后您可以说while (std::find(first, last, something) == last)。 [我花了一段时间才弄清楚你想做什么。一开始,我以为你想让something 枚举所有不在values 中的整数...]

标签: c++ list while-loop arguments


【解决方案1】:

您可以使用@Deepu 建议的方式,但更简洁、更强大的解决方案是使用系统中存在的事件机制。在一个线程上,您将等待 required-key-pressed 事件,而在另一个线程上,您将拦截按键中断并分析数据。如果它包含所需的值,请指明 required-key-pressed 事件。

【讨论】:

  • 他们...好的。我不完全明白你在这里说什么。这听起来像是一个 GUI 程序会使用的东西,它是事件驱动的。但是控制台应用程序?根据情况,向用户呈现不同数量的可能“正确”答案。我理解正确吗?
  • 没有什么限制这仅限于 GUI 应用程序,这是通用方法
  • 那么我怀疑我是否能够在我目前的状态下实现这一点。我不知道控制台应用程序中的线程和事件。
【解决方案2】:

好的,所以问题解决了,但是在cmets中给我回复的人没有完整回复,所以我将答案贴在这里。

将列表更改为矢量vector<char> values[4]。然后使用了 Raymond Chen 建议的 find 功能:

while(find(values.begin(),values.end(),something)==values.end())
{
    doSomething(eatBananas)
}

如果 Raymond Chen 发布明确的答案,我会标记他的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    相关资源
    最近更新 更多