很简单,是否有一种更简单的方法来重复一个块一定次数,其中块内部不需要计数器变量?简单的解决方案当然是
for (int i = 0; i < repetitions; ++i) {
//do your thing, i is not used here
}
然而,既然我们已经考虑了标准算法和其他用于迭代容器的奇特构造,相比之下,这实际上开始感觉像是很多样板文件和细节,而这个案例应该是更简单的。例如我们对变量不感兴趣i
根本等等
最接近具体问题的是:当我遇到上面这样的 for 循环时,我需要扫描代码块以查看是否i
实际使用过,或者只是一个虚拟计数器。 for 循环的声明,它实际上想要对整数 0 到 执行某些操作repetitions - 1
看起来会一模一样。所以一个repeat (n)
-type 构造将具有额外的语义信息,即除了潜在的副作用之外,所有迭代都将相同。
一种选择是制作模板
template<class functor>
repeat(functor fun, unsigned n) {
for (unsigned i = 0; i < n; ++i)
fun();
}
and call
repeat([&](){
//do your thing
}, repetitions)
但这似乎对于一个简单的问题来说确实是过度设计的杀伤力。这可以被宏观化以使使用更好一点,但这肯定不会有助于过度设计的感觉。
所以一个有效的答案是,我在这里白费力气,应该使用带有计数器的旧式 for 循环。
任何标准 C++ 都可以,包括即将推出的标准。
相关问题例如如何在 C++ 中创建循环一定次数的循环? and 如何在 C++ 中创建循环一定次数的循环?初学者要求某种方法来实现这一目标,而我特别要求一种现代、干净和优雅的方法来实现这一目标。C++重复N次迭代非常接近,尽管这里的区别是我要求任何替代方案,不一定包含在std::
.