Ne.app NeANT
The Ne.app NeANT User module of the NeANT distribution.
merge.cpp
Go to the documentation of this file.
1
29#include <algorithm> // advance, copy, inplace_merge, merge
30#include <functional> // less
31#include <iostream> // cout
32#include <iterator> // back_inserter, ostream_iterator
33#include <vector> // vector
34
35#include <examples.h>
36
37
38int main ()
39{
40 typedef std::vector<int, std::allocator<int> > Vector;
41
42 const Vector::value_type d1[] = { 1, 2, 3, 4};
43 const Vector::value_type d2[] = { 11, 13, 15, 17, 12, 14, 16, 18};
44
45 // Set up two vectors.
46 Vector v1 (d1 + 0, d1 + sizeof d1 / sizeof *d1);
47 Vector v2 (d1 + 0, d1 + sizeof d1 / sizeof *d1);
48
49 // Set up four destination vectors.
50 Vector v3 (d2 + 0, d2 + sizeof d2 / sizeof *d2);
51 Vector v4 (v3);
52 Vector v5 (v3);
53 Vector v6 (v3);
54
55 // Set up one empty vector.
56 Vector v7;
57
58 // Merge v1 with v2.
59 std::merge (v1.begin (), v1.end (),
60 v2.begin (), v2.end (), v3.begin ());
61
62 // Now use comparator.
63 std::merge (v1.begin (), v1.end (),
64 v2.begin (), v2.end (), v4.begin (), std::less<int>());
65
66 // Merge v5 in place.
67 Vector::iterator mid = v5.begin ();
68 std::advance (mid, 4); // equivalent to mid += 4 but more generic
69 std::inplace_merge (v5.begin (), mid, v5.end ());
70
71 // Now use a comparator on v6.
72 mid = v6.begin ();
73 std::advance (mid, 4); // equivalent to mid += 4 but more generic
74 std::inplace_merge (v6.begin (), mid, v6.end (), std::less<int>());
75
76 // Merge v1 and v2 to empty vector using insert iterator.
77 std::merge (v1.begin (), v1.end (),
78 v2.begin (), v2.end (), std::back_inserter (v7));
79
80 // Copy all to cout.
81 std::ostream_iterator<int, char, std::char_traits<char> >
82 out (std::cout, " ");
83
84 std::copy (v1.begin (), v1.end (), out);
85 std::cout << '\n';
86 std::copy (v2.begin (), v2.end (), out);
87 std::cout << '\n';
88 std::copy (v3.begin (), v3.end (), out);
89 std::cout << '\n';
90 std::copy (v4.begin (), v4.end (), out);
91 std::cout << '\n';
92 std::copy (v5.begin (), v5.end (), out);
93 std::cout << '\n';
94 std::copy (v6.begin (), v6.end (), out);
95 std::cout << '\n';
96 std::copy (v7.begin (), v7.end (), out);
97 std::cout << '\n';
98
99 // Merge v1 and v2 to cout.
100 std::merge (v1.begin (), v1.end (), v2.begin (), v2.end (), out);
101 std::cout << '\n';
102
103 return 0;
104}
#define d1
Definition 17.names.cpp:228
#define v2
Definition 17.names.cpp:271
#define d2
Definition 17.names.cpp:254
#define v1
Definition 17.names.cpp:245
std::vector< UserClass, std::allocator< UserClass > > Vector
const int out
int main()
Definition merge.cpp:38