#include <algorithm> template <class ForwardIterator, class Generator> void generate(ForwardIterator first, ForwardIterator last, Generator gen);
#include <stdio.h> #include <vector> #include <algorithm> using namespace std; int set10() { return 10; } class set20 { public: int operator() () { return 20; } }; int sum(int &s, int &n) { s += n; n++; return s; } int main() { // 初期設定 vector<int> v1 {0, 1, 2, 3, 4, 5}; printf("v1 :"); for (auto x : v1) printf(" %d", x); printf("\n"); // すべての範囲の要素を 10 にする printf("すべての範囲の要素を 10 にする\n"); generate(v1.begin(), v1.end(), set10); // 関数 // generate(v1.begin(), v1.end(), []{ return 10; }); // ラムダ式 printf(" v1 :"); for (auto x : v1) printf(" %d", x); printf("\n"); // 後ろの 3 つの要素を 20 にする printf("後ろの 4 つの要素を 20 にする\n"); generate_n(v1.begin()+2, 4, set20()); // generate_n(v1.begin()+2, 4, []{ return 20; }); printf(" v1 :"); for (auto x : v1) printf(" %d", x); printf("\n"); // n 番目の要素に,1 から n までの和 printf("n 番目の要素に,1 から n までの和\n"); int s = 0, n = 1; generate(v1.begin(), v1.end(), [&s, &n]{ s += n; n++; return s; }); printf(" v1 :"); for (auto x : v1) printf(" %d", x); printf("\n"); return 0; }
v1 : 0 1 2 3 4 5 すべての範囲の要素を 10 にする v1 : 10 10 10 10 10 10 後ろの 4 つの要素を 20 にする v1 : 10 10 20 20 20 20 n 番目の要素に,1 から n までの和 v1 : 1 3 6 10 15 21
菅沼ホーム | 本文目次 | 演習問題解答例 | 付録目次 | 索引 |