C++算法 generate()函数用于将函数对象生成的值分配给参数中的每个元素。
生成器函数由用户定义,并被连续调用以分配编号。
template <class ForwardIterator, class Generator> void generate (ForwardIterator first, ForwardIterator last, Generator gen);
first:一个正向迭代器,指向要分配值的参数内第一个元素的位置。
last:前向迭代器,将位置指向要分配值的参数中的最后一个元素。
gen :不带参数的函数对象,用于生成要分配给参数中每个元素的值。
让我们看一个简单的示例来演示generate()的用法:
#include <algorithm> #include <iostream> #include <vector> using namespace std; int main() { vector<int> v(10); int n = 1; generate(v.begin(), v.end(), [&n]() { auto t = n; n *= 2; return t; } ); for_each(v.begin(), v.end(), [](int x) { cout << x << ","; }); return 0; }
输出:
1,2,4,8,16,32,64,128,256,512,
让我们看另一个简单的例子:
#include <iostream> #include <vector> #include <algorithm> // Defining the generator function int gen() { static int i = 0; return ++i; } using namespace std; int main() { int i; //Declaring a vector of size 10 vector<int> v1(10); //using std::generate std::generate(v1.begin(), v1.end(), gen); vector<int>::iterator i1; for (i1 = v1.begin(); i1 != v1.end(); ++i1) { cout << *i1 << " "; } return 0; }
输出:
1 2 3 4 5 6 7 8 9 10
让我们看另一个简单的例子:
#include <vector> #include <deque> #include <algorithm> #include <iostream> #include <ostream> int main( ) { using namespace std; //Assigning random values to vector integer elements vector <int> v1 ( 5 ); vector <int>::iterator Iter1; deque <int> deq1 ( 5 ); deque <int>::iterator d1_Iter; generate ( v1.begin ( ), v1.end ( ) , rand ); cout << "Vector v1 is ( " ; for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ ) cout << *Iter1 << " "; cout << ")." << endl; //Assigning random values to deque integer elements generate ( deq1.begin ( ), deq1.end ( ) , rand ); cout << "Deque deq1 is ( " ; for ( d1_Iter = deq1.begin( ) ; d1_Iter != deq1.end( ) ; d1_Iter++ ) cout << *d1_Iter << " "; cout << ")." << endl; return 0; }
输出:
Vector v1 is ( 1804289383 846930886 1681692777 1714636915 1957747793 ). Deque deq1 is ( 424238335 719885386 1649760492 596516649 1189641421 ).
让我们看另一个简单的例子:
#include <iostream> //std::cout #include <algorithm> //std::generate #include <vector> //std::vector #include <ctime> //std::time #include <cstdlib> //std::rand, std::srand using namespace std; // function generator: int RandomNumber () { return (rand()%100); } // class generator: struct c_unique { int current; c_unique() {current=0;} int operator()() {return ++current;} } UniqueNumber; int main () { srand ( unsigned ( std::time(0) ) ); vector<int> myvector (8); generate (myvector.begin(), myvector.end(), RandomNumber); cout << "myvector contains:"; for (vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it) cout << ' ' << *it; cout << '\n'; generate (myvector.begin(), myvector.end(), UniqueNumber); cout << "myvector contains:"; for (vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it) cout << ' ' << *it; cout << '\n'; return 0; }
输出:
myvector contains: 93 16 77 25 39 52 56 19 myvector contains: 1 2 3 4 5 6 7 8
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)