shushus

Спринт 13. Оптовая передача - наборы объектов.

Apr 20th, 2023
410
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.32 KB | None | 0 0
  1. -----------------------------------------------------------------------
  2. iterators.cpp
  3. -----------------------------------------------------------------------
  4. #include <iostream>
  5. #include <list>
  6. #include <set>
  7. #include <string_view>
  8. #include <vector>
  9.  
  10. using namespace std;
  11.  
  12. template <typename Iterator1, typename Iterator2>
  13. void Merge(Iterator1 start_1, Iterator1 end_1,
  14.            Iterator2 start_2, Iterator2 end_2,
  15.            std::ostream& output) {
  16.    
  17.     Iterator1 iter1_begin = start_1;
  18.     Iterator2 iter2_begin = start_2;
  19.  
  20.     while (iter1_begin != end_1 && iter2_begin != end_2) {
  21.        
  22.         if (std::less<>()(*iter1_begin, *iter2_begin)) {
  23.             output << *(iter1_begin++) << std::endl;
  24.         } else {
  25.             output << *(iter2_begin++) << std::endl;
  26.         }
  27.     }
  28.    
  29.     while (iter1_begin != end_1) {
  30.         output << *(iter1_begin++) << std::endl;
  31.     }
  32.    
  33.     while (iter2_begin != end_2) {
  34.         output << *(iter2_begin++) << std::endl;
  35.     }
  36.    
  37. }
  38.  
  39. template <typename Container1,  typename Container2>
  40. void MergeSomething(const Container1& container1, const Container2& container2, ostream& output) {
  41.  
  42.     Merge(container1.begin(),
  43.           container1.end(),
  44.           container2.begin(),
  45.           container2.end(),
  46.           output);
  47. }
  48.  
  49. template <typename Data>
  50. void MergeHalves(const vector<Data>& container, ostream& output) {
  51.     size_t middl = container.size()/2 + 0.5;
  52.    
  53.     Merge(container.begin(),
  54.           container.begin() + middl,
  55.           container.begin() + middl,
  56.           container.end(),
  57.           output);
  58. }
  59.  
  60. int main() {
  61.     vector<int> v1{60, 70, 80, 90};
  62.     vector<int> v2{65, 75, 85, 95};
  63.     vector<int> combined{60, 70, 80, 90, 65, 75, 85, 95};
  64.     list<double> my_list{0.1, 72.5, 82.11, 1e+30};
  65.     string_view my_string = "ACNZ"sv;
  66.     set<unsigned> my_set{20u, 77u, 81u};
  67.  
  68.     cout << "Merging vectors:"sv << endl;
  69.     MergeSomething(v1, v2, cout);
  70.  
  71.     cout << "Merging vector and list:"sv << endl;
  72.     MergeSomething(v1, my_list, cout);
  73.  
  74.     cout << "Merging string and list:"sv << endl;
  75.     MergeSomething(my_string, my_list, cout);
  76.  
  77.     cout << "Merging set and vector:"sv << endl;
  78.     MergeSomething(my_set, v2, cout);
  79.  
  80.     cout << "Merging vector halves:"sv << endl;
  81.     MergeHalves(combined, cout);
  82. }
Advertisement
Add Comment
Please, Sign In to add comment