【发布时间】:2019-02-28 11:40:50
【问题描述】:
我可以清楚地做这样的事情:
for(int i = 0; i < 10000; i++)
testIteration();
但是有没有任何标准函数可以在一行中做类似的事情?类似的东西:
std::repeat(10000, testIteration);
【问题讨论】:
-
在 C++11 中?不,什么都没有。我应该可以用C++20 ranges 和
std::for_each做点什么。在 C++20 可用且通用之前,您可以使用 the ranges library,它是 C++20 范围的基础。 -
如果您使用循环将某些操作应用于容器的每个元素,那么有标准算法。但是,本质上重复一个函数调用任意次数......这就是循环构造的用途,标准库很少尝试复制使用语言特性更容易完成的事情。如果您真的想要这样的功能,请自行推出 - 只是不要尝试将其放入命名空间
std(因为这样做会产生未定义的行为)。 -
新的 std::for_each 甚至新的 for 语法都有助于减少经常需要的样板文件。但是,根据经验,它实际上会导致更多样板。考虑您希望调用的函数是类的成员函数的情况;不能像这里一样简单地传递函数指针。
-
在这种情况下,IMO 您极不可能在可读性方面超越该循环。
-
好吧,1/ 你真的应该为此使用循环; 2/ 有
std::for_each_n但它没有在gcc 和clang 中实现; 3/ C++20 范围可能是一个解决方案; 4/ 提醒 1/.