C++标准库有std::generate()和std::generate_n();
例如:
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <iterator>
int generateRandomNumber()
{
return std::rand();
}
int main()
{
int n = 10;
std::vector<int> result;
generate_n(back_inserter(result), n, generateRandomNumber);
copy(result.begin(), result.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << '\n';
}
测试:https://ideone.com/5xD6P
至于第二个问题,如果我理解正确的话,是如何创建一个接受 int 参数、忽略它并调用您的int f() 的函子?
C++98 的方式是真正写出整个仿函数:
struct IgnoreArgument
{
typedef int(*fp_t)();
fp_t fp;
IgnoreArgument(fp_t f) : fp(f) {}
int operator()(int) const { return fp(); }
};
...
transform(v.begin(), v.end(), v.begin(), IgnoreArgument(f));
测试:https://ideone.com/DTsyl
C++11 的方式是使用 lambda 表达式
transform(v.begin(), v.end(), v.begin(), [](int){return f();});
测试:https://ideone.com/nAPXI
而C++98/boost的方式是使用boost::bind
transform(v.begin(), v.end(), v.begin(), boost::bind(f));
测试:https://ideone.com/cvd88