#include <algorithm> template <class BidirectionalIterator1, class BidirectionalIterator2> BidirectionalIterator2 copy_backward(BidirectionalIterator1 first, BidirectionalIterator1 last, BidirectionalIterator2 result);
#include <stdio.h> #include <vector> #include <algorithm> using namespace std; bool is_Odd(int x) { return x % 2 != 0; } int main() { // 初期設定 vector<int> v1 {0, 1, 2, 3, 4}; printf("v1 :"); for (auto x : v1) printf(" %d", x); printf("\n"); vector<int> v2 {10, 17, 21}; printf("v2 :"); for (auto x : v2) printf(" %d", x); printf("\n"); // copy printf("**v1 の 2 番目の要素以降に v2 をコピー**\n"); copy(v2.begin(), v2.end(), v1.begin()+1); printf(" v1 :"); for (auto x : v1) printf(" %d", x); printf("\n"); printf("**v1 の最初に v2 の最初の 1 個をコピー**\n"); copy_n(v2.begin(), 1, v1.begin()); printf(" v1 :"); for (auto x : v1) printf(" %d", x); printf("\n"); printf("**v1 の最初に v2 内の奇数要素だけをコピー**\n"); copy_if(v2.begin(), v2.end(), v1.begin(), is_Odd); // 関数 // copy_if(v2.begin(), v2.end(), v1.begin(), [](int x){ return x%2 > 0; }); // ラムダ式 printf(" v1 :"); for (auto x : v1) printf(" %d", x); printf("\n"); printf("**v1 の 2 番目の前に v2 を挿入コピー**\n"); copy(v2.begin(), v2.end(), inserter(v1, v1.begin()+1)); // inserter 参照 printf(" v1 :"); for (auto x : v1) printf(" %d", x); printf("\n"); printf("**v1 を v3 にコピー(挿入コピーでないとだめ)**\n"); vector<int> v3; copy(v1.begin(), v1.end(), inserter(v3, v3.begin())); printf(" v3 :"); for (auto x : v3) printf(" %d", x); printf("\n"); // copy_backward printf("**v2 を v1 の一番後にコピー**\n"); copy_backward(v2.begin(), v2.end(), v1.end()); printf(" v1 :"); for (auto x : v1) printf(" %d", x); printf("\n"); return 0; }
v1 : 0 1 2 3 4 v2 : 10 17 21 **v1 の 2 番目の要素以降に v2 をコピー** v1 : 0 10 17 21 4 **v1 の最初に v2 の最初の 1 個をコピー** v1 : 10 10 17 21 4 **v1 の最初に v2 内の奇数要素だけをコピー** v1 : 17 21 17 21 4 **v1 の 2 番目の前に v2 を挿入コピー** v1 : 17 10 17 21 21 17 21 4 **v1 を v3 にコピー(挿入コピーでないとだめ)** v3 : 17 10 17 21 21 17 21 4 **v2 を v1 の一番後にコピー** v1 : 17 10 17 21 21 10 17 21
菅沼ホーム | 本文目次 | 演習問題解答例 | 付録目次 | 索引 |