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
非常感谢。但有关虚拟变量的问题仍然存在。 – 2011-05-03 18:28:15
@Ilya Razenshteyn你可以举一个如何使用这种变量的例子吗? – Cubbi 2011-05-03 18:31:18
假设我有一个函数int f(),现在我想要产生一个函数int g(int){return f(); }使用标准的东西。 – 2011-05-03 18:39:12