如果语句代替while循环

时间:2019-03-08 19:18:02

标签: c++ if-statement while-loop

这个问题很奇怪,但是我有一个朋友问是否有可能,我不能给他答案。是否可以使用if语句编写以下while循环?

while (!x.empty() && !y.empty()){}

我在想,如果您有一个嵌套的if语句可以设置标志,那么可以使用while循环来解决这个问题?还有其他想法吗?

很抱歉这个愚蠢的问题。

5 个答案:

答案 0 :(得分:1)

您可以在break循环内将while语句与if-else语句一起使用

while (1)
{
    if (!x.empty() && !y.empty()) 
    {
         // do something;
    }
    else break;
}

答案 1 :(得分:0)

有点。您可以通过递归函数调用来实现。喜欢:

void whileLoop(){
   if(!(!x.empty() && !y.empty())){
      return;
   }

   //Code to run in loop here

   whileLoop();
}

要运行循环时,将调用该函数。注意原始循环中要检查的条件前面的 not 符号;好像条件不再成立,循环代码将无法运行。

答案 2 :(得分:0)

另一种方式:递归

#include <stack>
#include <boost/hof.hpp>

int main()
{
    extern std::stack<int> get();

    auto x = get();
    auto y = get();

    auto f = boost::hof::fix([&](auto self)
    {
        if (!x.empty() && !y.empty())
        {
            x.pop();
            y.pop();
            self();
        }
        return 0;
    });

    boost::hof::result<int>(f)();
}

https://godbolt.org/z/M-JkV2

答案 3 :(得分:0)

不是直接的,而是不使用while ...好的ole goto语句的另一种方式。

int main()
{
    ....
start:
    if(!x.empty() && !y.empty())
        goto start;
    ....
 }

答案 4 :(得分:0)

您可以牺牲代码的可读性,并通过递归实现。注意,这会使代码变得比所需的复杂。递归将需要比常规迭代代码更多的堆栈空间。我会做这样的事情-

//iterative
while (!x.empty() && !y.empty()) {
  //do something
}
//recursive
void recursion(vector<int> x, vector<int> y){
  if(!x.empty() && !y.empty()) {
    //do something

    //remove element from vector based on your condition

    x.pop_back();
    y.pop_back();
    recursion(x, y);
  } 
}

递归退出条件是两个向量均为空。