#include <algorithm> template <class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result); template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> OutputIterator set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp);
#include <stdio.h> #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { // 初期設定 vector<int> v1 {1, 3, 10, 2, 10, 3, 20}; printf("v1 :"); for (auto x : v1) printf(" %d", x); printf("\n"); vector<int> v2 {5, 3, 2, 3, 4, 3, 30}; printf("v2 :"); for (auto x : v2) printf(" %d", x); printf("\n"); // sort sort(v1.begin(), v1.end()); printf(" sort v1 :"); for (auto x : v1) printf(" %d", x); printf("\n"); sort(v2.begin(), v2.end()); printf(" sort v2 :"); for (auto x : v2) printf(" %d", x); printf("\n"); // v1 に含まれ,v2 に含まれない要素 printf("v1 に含まれ,v2 に含まれない要素\n"); vector<int> v3; set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v3, v3.begin())); // inserter 参照 printf(" set_difference v3 :"); for (auto x : v3) printf(" %d", x); printf("\n"); // v1 及び v2 の片方だけに含まれる要素 printf("v1 及び v2 の片方だけに含まれる要素\n"); vector<int> v4; set_symmetric_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v4, v4.begin())); printf(" set_symmetric_difference v4 :"); for (auto x : v4) printf(" %d", x); printf("\n"); // v1 及び v2 の両方に含まれる要素 printf("v1 及び v2 の両方に含まれる要素\n"); vector<int> v5; set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v5, v5.begin())); printf(" set_intersection v5 :"); for (auto x : v5) printf(" %d", x); printf("\n"); // v1 または v2 に含まれる要素 printf("v1 または v2 に含まれる要素\n"); vector<int> v6; set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v6, v6.begin())); printf(" set_union v6 :"); for (auto x : v6) printf(" %d", x); printf("\n"); // v7 または v8 に v5 が含まれるか? printf("v7 に v5 が含まれるか?\n"); vector<int> v7 {2, 3, 5, 10}; vector<int> v8 {2, 3, 3, 5, 10}; printf(" v7 :"); for (auto x : v7) printf(" %d", x); printf("\n"); printf(" v8 :"); for (auto x : v8) printf(" %d", x); printf("\n"); printf(" v5 :"); for (auto x : v5) printf(" %d", x); printf("\n"); bool b1 = includes(v7.begin(), v7.end(), v5.begin(), v5.end()); bool b2 = includes(v8.begin(), v8.end(), v5.begin(), v5.end()); cout << boolalpha << " v7 に v5 が含まれるか? " << b1 << endl; cout << " v8 に v5 が含まれるか? " << b2 << endl; return 0; }
v1 : 1 3 10 2 10 3 20 v2 : 5 3 2 3 4 3 30 sort v1 : 1 2 3 3 10 10 20 sort v2 : 2 3 3 3 4 5 30 v1 に含まれ,v2 に含まれない要素 set_difference v3 : 1 10 10 20 v1 及び v2 の片方だけに含まれる要素 set_symmetric_difference v4 : 1 3 4 5 10 10 20 30 v1 及び v2 の両方に含まれる要素 set_intersection v5 : 2 3 3 v1 または v2 に含まれる要素 set_union v6 : 1 2 3 3 3 4 5 10 10 20 30 v7 に v5 が含まれるか? v7 : 2 3 5 10 v8 : 2 3 3 5 10 v5 : 2 3 3 v7 に v5 が含まれるか? false v8 に v5 が含まれるか? true
菅沼ホーム | 本文目次 | 演習問題解答例 | 付録目次 | 索引 |