是否可以在继续使用 c++ 之前将"for loop"嵌入"if statement"中以比较多个条件

Is it possible to embed "for loop" inside an "if statement" to compare multiple condition before continuing using c++

本文关键字:if 嵌入 loop statement 比较 条件 for 继续 c++ 是否      更新时间:2023-10-16

在这个程序中,用户必须输入一个3个字母的出发机场代码(userFlight),我会给他们可能的目的地。为了检查他们输入的是有效的机场代码之一(departureAirport),我想比较userFlight,并确保它是我存储在一个名为flights[]的向量中的可能的departureAirport之一。这段代码显然不起作用,但有类似的方法可以实现吗?

 if             
        (for (j = 0, j < flights.size, j++)
        {
        (userFlight != flights[j].departAirport)
        })
    {return errorCode};
else
    {//doSomething()};

如果它内部有一个operator<,与您的情况相比确实很相似,如何

if(std::find(flights.begin(), flights.end(), userFlight) != flights.end())
{
    /* found */
}
else
{
    /* not found */
}

否则,如果你不喜欢,只需检查循环是否贯穿所有索引:

size_t i;
for (i = 0, i < flights.size, i++)
{
    if(userFlight == flights[i].departAirport)
        break;
}
if(i < flights.size)
{
    /* found */
}
else
{
    /* not found */
}

但不,你想要的语法并不存在。

您想要的代码结构是:

for (j = 0; j < flights.size(); j++)
    if (userFlight == flights[j].departAirport)
        break;
if ( j == flights.size() )   // we got to the end
    return errorCode;
doSomething(j);

然而,这是一种类似C的代码样式。这并不是说有什么错,但C++允许算法更抽象地表达(因此更容易阅读和维护)。IMHO最好使用诸如CCD_ 2或CCD_。

听起来你实际上想要一个离港机场的std::set

std::set<std::string> departing_airports = {"DTW", "MKE", "MSP", };
assert(departing_airports.count("DTW") == 1);

还有一个选项是std::any_of。假设flights包含Flight:类型的对象

if (std::any_of(std::begin(flights), std::end(flights),
        [&](const Flight& f) { return userFlight == f.departAirport; }))
    return errorCode;
doSomething();