C++ 算法 中的 generate_n函数

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

C++算法 generate_n()函数用于将函数对象生成的值分配给参数内指定数量的元素,并返回到最后一个分配值位置之后的那个值。

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

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

generate_n - 参数

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

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

n :生成器函数要分配的元素数。它可以是有符号或无符号整数类型。

generate_n - 例子1

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

generate_n - 例子2

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

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

generate_n - 例子3

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

无涯教程网

#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

generate_n - 例子4

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

无涯教程网

#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

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

技术教程推荐

说透中台 -〔王健〕

罗剑锋的C++实战笔记 -〔罗剑锋〕

Vim 实用技巧必知必会 -〔吴咏炜〕

Linux内核技术实战课 -〔邵亚方〕

物联网开发实战 -〔郭朝斌〕

打造爆款短视频 -〔周维〕

业务开发算法50讲 -〔黄清昊〕

中间件核心技术与实战 -〔丁威〕

大厂设计进阶实战课 -〔小乔〕

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