C++ 算法 generate() 函數用於將函數對象生成的值賦給範圍內的每個元素。
生成器函數由用戶定義,並被連續調用以分配數字。
用法
template <class ForwardIterator, class Generator>
void generate (ForwardIterator first, ForwardIterator last, Generator gen);
參數
first:一個前向迭代器,指向要分配值的範圍中第一個元素的位置。
last: 一個前向迭代器,指向值將被分配到的範圍中最後一個元素之後的位置。
gen:一個沒有參數的函數對象,用於生成要分配給範圍內每個元素的值。
返回值
空
複雜度
複雜度在 [first, last) 範圍內是線性的。它調用 gen 並對每個元素執行賦值。
數據競爭
範圍 [first ,last) 中的對象被修改。每個對象隻被訪問一次。
異常安全
如果 gen、元素賦值或迭代器上的操作中的任何一個拋出異常,則此函數將拋出異常。
請注意,無效參數會導致未定義的行為。
例子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,
例子2
讓我們看另一個簡單的例子:
#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
例子3
讓我們看另一個簡單的例子:
#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 ).
示例 4
讓我們看另一個簡單的例子:
#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
相關用法
- C++ Algorithm generate_n()用法及代碼示例
- 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 ()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。