#include <numeric> template <class InputIterator, class OutputIterator> OutputIterator adjacent_difference(InputIterator first, InputIterator last, OutputIterator result); template <class InputIterator, class OutputIterator, class BinaryOperation> OutputIterator adjacent_difference(InputIterator first, InputIterator last, OutputIterator result, Binary_operation binary_op);
#include <stdio.h> #include <vector> #include <numeric> using namespace std; int sum(int n1, int n2) { return 2 * (n1 - n2); } int main() { // 初期設定 vector<int> v1 {1, 3, 6, 2, 1}; printf("v1 :"); for (auto x : v1) printf(" %d", x); printf("\n"); // v1 の各要素の差からなる系列 printf("v1 の各要素の差からなる系列\n"); vector<int> v2; adjacent_difference(v1.begin(), v1.end(), inserter(v2, v2.begin())); // inserter 参照 // vector<int> v2(5); // inserter を利用しない場合は,大きさを前もって指定する必要がある // adjacent_difference(v1.begin(), v1.end(), v2.begin()); printf(" v2 :"); for (auto x : v2) printf(" %d", x); printf("\n"); // v1 の各要素の差の 2 倍からなる系列(最初は v1 の 1 番目の要素と必ず一致) printf("v1 の各要素の差の 2 倍からなる系列(最初は v1 の 1 番目の要素と必ず一致)\n"); vector<int> v3; adjacent_difference(v1.begin(), v1.end(), inserter(v3, v3.begin()), sum); // 関数 // adjacent_difference(v1.begin(), v1.end(), inserter(v3, v3.begin()), [](int x, int y){ return 2 * (x - y); }); // ラムダ式 // vector<int> v3(5); // adjacent_difference(v1.begin(), v1.end(), v3.begin(), sum); // adjacent_difference(v1.begin(), v1.end(), v3.begin(), [](int x, int y){ return 2 * (x - y); }); printf(" v3 :"); for (auto x : v3) printf(" %d", x); printf("\n"); // 5 から始まる 10 個の正数列 printf("5 から始まる 10 個の正数列\n"); vector<int> v4(10); iota(v4.begin(), v4.end(), 5); printf(" v4 :"); for (auto x : v4) printf(" %d", x); printf("\n"); return 0; }
v1 : 1 3 6 2 1 v1 の各要素の差からなる系列 v2 : 1 2 3 -4 -1 v1 の各要素の差の 2 倍からなる系列(最初は v1 の 1 番目の要素と必ず一致) v3 : 1 4 6 -8 -2 5 から始まる 10 個の正数列 v4 : 5 6 7 8 9 10 11 12 13 14
菅沼ホーム | 本文目次 | 演習問題解答例 | 付録目次 | 索引 |