C++ 算法 中的 generate函数

首页 / C++入门教程 / C++ 算法 中的 generate函数

C++算法 generate()函数用于将函数对象生成的值分配给参数中的每个元素。

生成器函数由用户定义,并被连续调用以分配编号。

generate - 语法

template <class ForwardIterator, class Generator>
  void generate (ForwardIterator first, ForwardIterator last, Generator gen);

generate - 参数

first:一个正向迭代器,指向要分配值的参数内第一个元素的位置。

last:前向迭代器,将位置指向要分配值的参数中的最后一个元素。

gen :不带参数的函数对象,用于生成要分配给参数中每个元素的值。

generate - 例子1

让我们看一个简单的示例来演示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,

generate - 例子2

让我们看另一个简单的例子:

链接:https://www.learnfk.comhttps://www.learnfk.com/c++/cpp-algorithm-generate-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 
    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  

generate - 例子3

让我们看另一个简单的例子:

链接:https://www.learnfk.comhttps://www.learnfk.com/c++/cpp-algorithm-generate-function.html

来源:LearnFk无涯教程网

#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 ).

generate - 例子4

让我们看另一个简单的例子:

链接:https://www.learnfk.comhttps://www.learnfk.com/c++/cpp-algorithm-generate-function.html

来源:LearnFk无涯教程网

#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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

左耳听风 -〔陈皓〕

从0开始学大数据 -〔李智慧〕

玩转Spring全家桶 -〔丁雪丰〕

SQL必知必会 -〔陈旸〕

高并发系统设计40问 -〔唐扬〕

Electron开发实战 -〔邓耀龙〕

深入浅出云计算 -〔何恺铎〕

Python实战 · 从0到1搭建直播视频平台 -〔Barry〕

AI大模型系统实战 -〔Tyler〕

好记忆不如烂笔头。留下您的足迹吧 :)