#include <algorithm> template <class InputIterator, class OutputIterator, class T> OutputIterator remove_copy(InputIterator first, InputIterator last, OutputIterator result, const T& value);
#include <stdio.h> #include <vector> #include <algorithm> using namespace std; // 奇数の判定 class is_odd : public unary_function<int, bool> { public: result_type operator() (argument_type k) { return (result_type)(k % 2); } }; int main() { vector<int> v2; // 初期設定 vector<int> v1 {0, 1, 2, 3, 4}; printf("v1 :"); for (auto x : v1) printf(" %d", x); printf("\n"); // 2 を削除する printf("**v1 の 2 を削除する**\n"); vector<int>::iterator it, end; end = remove(v1.begin(), v1.end(), 2); // 注意 printf(" v1(end) :"); for (it = v1.begin(); it != end; it++) printf(" %d", *it); printf("\n"); printf(" v1 :"); for (auto x : v1) printf(" %d", x); printf("\n size of v1 = %d (注意)\n", v1.size()); // 奇数を削除する printf("**v1 の 奇数を削除する**\n"); end = remove_if(v1.begin(), end, is_odd()); // 注意,単項関数オブジェクト // end = remove_if(v1.begin(), end, [](int x){ return x%2 > 0; }); // 注意,ラムダ式 printf(" v1(end) :"); for (it = v1.begin(); it != end; it++) printf(" %d", *it); printf("\n"); printf(" v1 :"); for (auto x : v1) printf(" %d", x); printf("\n size of v1 = %d (注意)\n", v1.size()); // 再初期設定 v1.clear(); printf("**再設定**\n"); printf(" v1 :"); for (int i1 = 0; i1 < 5; i1++) v1.push_back(i1+1); for (auto x : v1) printf(" %d", x); printf("\n size of v1 = %d\n", v1.size()); for (int i1 = 0; i1 < 7; i1++) v2.push_back(10*(i1+1)); printf(" v2 :"); for (auto x : v2) printf(" %d", x); printf("\n size of v2 = %d\n", v2.size()); // 2 を削除し v2 にコピー printf("**v1 の 2 を削除し v2 にコピー**\n"); remove_copy(v1.begin(), v1.end(), v2.begin(), 2); printf(" v1 :"); for (auto x : v1) printf(" %d", x); printf("\n size of v1 = %d\n", v1.size()); printf(" v2 :"); for (auto x : v2) printf(" %d", x); printf("\n size of v2 = %d\n", v2.size()); // 奇数を削除し v2 にコピー printf("**v1 の 奇数を削除し v2 にコピー**\n"); remove_copy_if(v1.begin(), v1.end(), v2.begin(), is_odd()); // remove_copy_if(v1.begin(), v1.end(), v2.begin(), [](int x){ return x%2 > 0; }); printf(" v1 :"); for (auto x : v1) printf(" %d", x); printf("\n size of v1 = %d\n", v1.size()); printf(" v2 :"); for (auto x : v2) printf(" %d", x); printf("\n size of v2 = %d\n", v2.size()); return 0; }
v1 : 0 1 2 3 4 **v1 の 2 を削除する** v1(end) : 0 1 3 4 v1 : 0 1 3 4 4 size of v1 = 5 (注意) **v1 の 奇数を削除する** v1(end) : 0 4 v1 : 0 4 3 4 4 size of v1 = 5 (注意) **再設定** v1 : 1 2 3 4 5 size of v1 = 5 v2 : 10 20 30 40 50 60 70 size of v2 = 7 **v1 の 2 を削除し v2 にコピー** v1 : 1 2 3 4 5 size of v1 = 5 v2 : 1 3 4 5 50 60 70 size of v2 = 7 **v1 の 奇数を削除し v2 にコピー** v1 : 1 2 3 4 5 size of v1 = 5 v2 : 2 4 4 5 50 60 70 size of v2 = 7
菅沼ホーム | 本文目次 | 演習問題解答例 | 付録目次 | 索引 |