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