在C++中,我如何创建一个全新的流控制语句?

ipe*_*tta 0 c++ loops statements

我开发了一种算法来将控制标志更改为特定的顺序.可以将其视为计数器或时钟,您可以在其中定义最小值,最大值,步长等.但每次我想使用它时,我都需要复制粘贴几行代码并在中间更改一些行.

如果有一种方法可以实现这个新的流控制语句,我就会徘徊.我的问题也可以说是"如何编写一个函数,我需要一个简单的或复合的C++语句作为参数"?

接近我的问题的另一种方法是弄清楚如何转换以下代码:

int a;
vector<int> av;
for(int i = 0; i < 10; i++)
{
    a = (i > a)? i : i*2;
    av.push_back(a);
}
for(int i = 20; i >= 10; i--)
{
    a = ((a+i)%2 == 1)? 0 : i/2;
    av.push_back(a*3);
}
Run Code Online (Sandbox Code Playgroud)

接近这个:

// definition
void another_for_loop(const int &a, const int &b, const int &inc_, [????] )
{
    inc = (inc_ == 0) ? 1 : inc_;
    if(inc > 0)
    {
        for(int i = min(a,b); i <= max(a,b); i += inc)
            [????];
    }
    else
    {
        for(int i = max(a,b); i >= min(a,b); i += inc)
            [????];
    }
}

// [...]
// inside main{}
int a;
vector<int> av;
another_for_loop(0, 9, 1, {a = (i > a)? i : i*2; av.push_back(a);});
another_for_loop(10, 20, -1, {a = ((a+i)%2 == 1)? 0 : i/2; av.push_back(a*3);});
Run Code Online (Sandbox Code Playgroud)

希望有一个聪明的方法来做到这一点...... :-D

即使没有办法,请告诉我.

Jar*_*d42 11

你可以使用functor和lambda:

// definition
template <typename F>
void another_for_loop(const int &a, const int &b, const int &inc_, F f)
{
    int inc = (inc_ == 0) ? 1 : inc_;
    if(inc > 0)
    {
        for(int i = min(a,b); i <= max(a,b); i += inc)
            f(i);
    }
    else
    {
        for(int i = max(a,b); i >= min(a,b); i += inc)
            f(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后

int a = 0;
vector<int> av;
another_for_loop(0, 9, 1, [&a, &av](int i){a = (i > a)? i : i*2; av.push_back(a);});
another_for_loop(10, 20, -1, [&a, &av](int i){a = ((a+i)%2 == 1)? 0 : i/2; av.push_back(a*3);});
Run Code Online (Sandbox Code Playgroud)