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: 由生成器函数分配的元素数。它可以是有符号或无符号整数类型。
返回值
空
复杂度
复杂度在 n 中是线性的。它调用 gen 并对每个元素执行赋值。
数据竞争
first 指向的范围内的前 n 个对象被修改,其中每个对象只被修改一次。
异常安全
如果 gen、元素赋值或迭代器上的操作中的任何一个抛出异常,则此函数将抛出异常。
请注意,无效参数会导致未定义的行为。
例子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,
例子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 ).
例子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
示例 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++ Algorithm generate()用法及代码示例
- C++ Algorithm remove_if()用法及代码示例
- C++ Algorithm remove()用法及代码示例
- C++ Algorithm max_element()用法及代码示例
- C++ Algorithm set_union()用法及代码示例
- C++ Algorithm next_permutation()用法及代码示例
- C++ Algorithm upper_bound()用法及代码示例
- C++ Algorithm minmax()用法及代码示例
- C++ Algorithm remove_copy_if()用法及代码示例
- C++ Algorithm random_shuffle()用法及代码示例
- C++ Algorithm pop_heap()用法及代码示例
- C++ Algorithm replace()用法及代码示例
- C++ Algorithm set_intersection()用法及代码示例
- C++ Algorithm lower_bound()用法及代码示例
- C++ Algorithm transform()用法及代码示例
- C++ Algorithm set_difference()用法及代码示例
- C++ Algorithm is_sorted()用法及代码示例
- C++ Algorithm equal_range()用法及代码示例
- C++ Algorithm minmax_element()用法及代码示例
- C++ Algorithm stable_sort()用法及代码示例
注:本文由纯净天空筛选整理自 C++ Algorithm generate_n()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。