Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <list>
- #include <set>
- #include <string_view>
- #include <vector>
- using namespace std;
- template <typename InputIt1, typename InputIt2>
- void Merge(InputIt1 src1_begin, InputIt1 src1_end, InputIt2 src2_begin, InputIt2 src2_end, ostream& out) {
- while (src1_begin != src1_end && src2_begin != src2_end) {
- if (std::less<>()(*src2_begin, *src1_begin)) {
- out << *src2_begin++ << endl;
- }
- else {
- out << *src1_begin++ << endl;
- }
- }
- while (src1_begin != src1_end) {
- out << *src1_begin++ << endl;
- }
- while (src2_begin != src2_end) {
- out << *src2_begin++ << endl;
- }
- }
- template <typename T1, typename T2>
- void MergeSomething(const T1& src1, const T2& src2, ostream& out) {
- Merge(src1.begin(), src1.end(), src2.begin(), src2.end(), out);
- }
- template <typename T>
- void MergeHalves(const vector<T>& src, ostream& out) {
- auto mid_it = src.begin() + (src.size() + 1) / 2;
- Merge(src.begin(), mid_it, mid_it, src.end(), out);
- }
- int main() {
- vector<int> v1{ 60, 70, 80, 90 };
- vector<int> v2{ 65, 75, 85, 95 };
- vector<int> combined{ 60, 70, 80, 90, 65, 75, 85, 95 };
- list<double> my_list{ 0.1, 72.5, 82.11, 1e+30 };
- string_view my_string = "ACNZ"sv;
- set<unsigned> my_set{ 20u, 77u, 81u };
- // пока функция MergeSomething реализована пока только для векторов
- cout << "Merging vectors:"sv << endl;
- MergeSomething(v1, v2, cout);
- cout << "Merging vector and list:"sv << endl;
- MergeSomething(v1, my_list, cout);
- cout << "Merging string and list:"sv << endl;
- MergeSomething(my_string, my_list, cout);
- cout << "Merging set and vector:"sv << endl;
- MergeSomething(my_set, v2, cout);
- cout << "Merging vector halves:"sv << endl;
- MergeHalves(combined, cout);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement