generate と generate_n の使用方法です.関数としては,以下に示すように関数オブジェクトを使用することも可能です.
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
int set10() { return 10; }
class set20
{
public:
int operator() ()
{
return 20;
}
};
int main()
{
vector<int> v1;
vector<int>::iterator it;
// 初期設定
printf("**初期状態**\n");
for (int i1 = 0; i1 < 5; i1++)
v1.push_back(i1+1);
for (it = v1.begin(); it != v1.end(); it++)
printf(" %d", *it);
printf("\n");
// すべての範囲の要素を 10 にする
printf("すべての範囲の要素を 10 にする\n");
generate(v1.begin(), v1.end(), set10);
for (it = v1.begin(); it != v1.end(); it++)
printf(" %d", *it);
printf("\n");
// 後ろの 3 つの要素を 20 にする
printf("後ろの 3 つの要素を 20 にする\n");
generate_n(v1.begin()+2, 3, set20());
for (it = v1.begin(); it != v1.end(); it++)
printf(" %d", *it);
printf("\n");
return 0;
}
(出力)
**初期状態**
1 2 3 4 5
すべての範囲の要素を 10 にする
10 10 10 10 10
後ろの 3 つの要素を 20 にする
10 10 20 20 20