这个问题很奇怪,但是我有一个朋友问是否有可能,我不能给他答案。是否可以使用if语句编写以下while循环?
while (!x.empty() && !y.empty()){}
我在想,如果您有一个嵌套的if语句可以设置标志,那么可以使用while循环来解决这个问题?还有其他想法吗?
很抱歉这个愚蠢的问题。
答案 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)();
}
答案 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);
}
}
递归退出条件是两个向量均为空。