很简单,有没有更简单的方法来重复一个块一定次数,其中块里面不需要计数器变量?微不足道的解决方案当然是
for (int i = 0; i < repetitions; ++i) {
//do your thing, i is not used here
}
Run Code Online (Sandbox Code Playgroud)
然而,既然我们已经研究了用于迭代容器的标准算法和其他奇特的构造,相比之下,这实际上开始让人觉得有很多样板和细节,这应该是一个更简单的案例。例如,我们对变量根本不感兴趣i等等。
最接近具体问题的是:当我遇到像上面这样的 for 循环时,我需要扫描代码块以查看是否i实际使用,或者它是否只是一个虚拟计数器。实际上想要对整数 0 执行某些操作的 for 循环的声明repetitions - 1看起来相同。因此,一个repeat (n)-type 构造将具有额外的语义信息,即所有迭代都将相同,除了潜在的副作用。
一种选择是制作模板
template<class functor>
repeat(functor fun, unsigned n) {
for (unsigned i = 0; i < n; ++i)
fun();
}
Run Code Online (Sandbox Code Playgroud)
并打电话
repeat([&](){
//do your thing
}, repetitions)
Run Code Online (Sandbox Code Playgroud)
但这对于一个简单的问题来说似乎真的是过度设计的矫枉过正。这可以被宏观化以使使用更好一点,但这肯定无助于过度设计的感觉。
所以一个有效的答案是,我在这里大吃一惊,应该只使用带有计数器的旧 for 循环。
任何标准 C++ 都可以,包括即将推出的标准。
相关问题,例如如何在 C++ 中创建循环一定次数的循环? 以及如何在 C++ …