C++算法 generate_n()函数用于将函数对象生成的值分配给参数内指定数量的元素,并返回到最后一个分配值位置之后的那个值。
生成器函数由用户定义,并被连续调用以分配编号。
template <class OutputIterator, class Size, class Generator> void generate_n (OutputIterator first, Size n, Generator gen); //Until C++ 11 template <class OutputIterator, class Size, class Generator> OutputIterator generate_n (OutputIterator first, Size n, Generator gen); //Since C++ 11
first:一个正向迭代器,指向要分配值的参数内第一个元素的位置。
gen :不带参数的函数对象,用于生成要分配给参数中每个元素的值。
n :生成器函数要分配的元素数。它可以是有符号或无符号整数类型。
让我们看一个简单的示例来演示generate_n()的用法:
#include <algorithm> #include <iostream> #include <iterator> using namespace std; int main() { int n = 1; generate_n(ostream_iterator<int>(cout, ","), 10, [&n]{ auto t = n; n *= 2; return t; }); return 0; }
输出:
1,2,4,8,16,32,64,128,256,512,
让我们看另一个简单的例子:
#include <vector> #include <deque> #include <algorithm> #include <iostream> #include <ostream> using namespace std; int main() { //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_n ( v1.begin ( ), 3 , 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_n ( deq1.begin ( ), 4 , 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 0 0 ). Deque deq1 is ( 1714636915 1957747793 424238335 719885386 0 ).
让我们看另一个简单的例子:
链接:https://www.learnfk.comhttps://www.learnfk.com/c++/cpp-algorithm-generate-n-function.html
来源:LearnFk无涯教程网
#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_n std::generate_n(v1.begin(), 10, 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
让我们看另一个简单的例子:
链接:https://www.learnfk.comhttps://www.learnfk.com/c++/cpp-algorithm-generate-n-function.html
来源:LearnFk无涯教程网
#include <iostream> //std::cout #include <algorithm> //std::generate_n using namespace std; int current = 0; int UniqueNumber () { return ++current; } int main () { int myarray[9]; generate_n (myarray, 9, UniqueNumber); cout << "myarray contains:"; for (int i=0; i<9; ++i) cout << ' ' << myarray[i]; cout << '\n'; return 0; }
输出:
myarray contains: 1 2 3 4 5 6 7 8 9
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)