C++ 有没有办法重复一个循环周期?

C++ 有没有办法重复一个循环周期?,c++,C++,是否有一种方法可以重复下面代码示例中的循环循环,而不必将i增加1 bool twice = true; bool* repeated = new bool[64]; int counter = 0; for (int i = 0; i < 64; i++) { counter++; if (twice && !repeated[i]) { repeated[i] = true; repeat; } } delete

是否有一种方法可以重复下面代码示例中的循环循环,而不必将
i
增加1

bool twice = true;
bool* repeated = new bool[64];
int counter = 0;
for (int i = 0; i < 64; i++)
{
    counter++;
    if (twice && !repeated[i])
    {
       repeated[i] = true;
       repeat;
    }
}
delete[] repeated;
cout << counter << endl;
//counter should print 128
bool两次=真;
bool*repeated=新bool[64];
int计数器=0;
对于(int i=0;i<64;i++)
{
计数器++;
如果(两次&&!重复[i])
{
重复[i]=正确;
重复;
}
}
删除[]重复;

cout您可以使用lambda函数包装循环的内部,然后简单地调用它两次

bool twice = true;
int counter = 0;
auto execute_interior = [](const int i){/*Do something with i*/};

for (int i = 0; i < 64; i++)
{
    ++counter;

    execute_interior(i);
    if (twice)
        execute_interior(i);
}

std::cout << counter << std::endl;
bool两次=真;
int计数器=0;
自动执行_interior=[](const int i){/*使用i*/}执行某些操作;
对于(int i=0;i<64;i++)
{
++计数器;
执行内部(i);
如果(两次)
执行内部(i);
}

我问你是否所有的迭代都需要重复,你的回答是肯定的

我还问过一次传球是否重要,或者两次传球是否可以接受。如果是后者,那么我会直截了当地建议你不要太聪明。遵循显而易见的原则:

/* Count the widgets twice: */
for (int i = 0; i != 2; ++i)
{
    for (int j = 0; j != 64; ++j)
        do_something();
}
如果您确实需要一次通过,那么我的建议将同样简单,并且按照@StefanKssmr已经给您的建议,我将添加一条额外的注释,以避免一些尽责的程序员通过删除明显错误的重复来分解代码:

for (int i = 0; i != 64; ++i)
{
    /* This call is duplicated on purpose! */
    do_something();
    do_something();
}
如果您需要将迭代的索引传递到
dou\u something
中,您可以使用一些肮脏的技巧:

for (int i = 0; i != 128; ++i)
    do_something(i / 2);


尽管如此,我还是要提醒你:你的例子可能无法准确描述你所面临的问题;相反,它描述了您提出的解决方案的一个非常抽象的实现,这可能是因为您没有提出实际问题,您陷入了一个糟糕的设计选择。

在一个不相关的注释上,将
i
递减1,为什么动态地分配
重复的
?为什么不使用普通数组(如
bool repeated[64]={false};
)?特别是因为您可以显式初始化数组,而无法初始化动态分配的内存,这会导致在使用未初始化的数据及其不确定值时出现未定义的行为。我的意思是,对于同一索引,代码要执行两次。很难知道您试图实现什么。例如,是否每个迭代都需要重复,或者只是一些迭代?一次传球重要还是两次都可以?正如所问的那样,这个问题的一个好答案是不可能的。所有的迭代都编辑了这个问题。对不起,我的错。在定义之前无法捕获它。我把它当作兰姆达的论点,对。我写的例子有点糟糕。如果在循环中的内部代码之后没有结果(分配给变量的值或仅仅是
continue
inside),我希望循环重复。也就是说,在某些情况下,所有的迭代都需要重复两次,有时只需要几次。