Dukales

container inverter

Nov 12th, 2014
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.33 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <deque>
  4. #include <list>
  5. #include <string>
  6. #include <algorithm>
  7. #include <iterator>
  8. #include <utility>
  9.  
  10. #include <cstdlib>
  11. #include <cassert>
  12.  
  13. template< typename type >
  14. struct reversed_container
  15. {
  16.    
  17.     reversed_container(type && _container)
  18.         : container_(std::forward< type >(_container))
  19.     { ; }
  20.    
  21.     auto
  22.     begin()
  23.     {
  24.         return std::rbegin(container_);
  25.     }
  26.    
  27.     auto
  28.     end()
  29.     {
  30.         return std::rend(container_);
  31.     }
  32.    
  33. private :
  34.  
  35.     type container_;
  36.    
  37. };
  38.  
  39. template< typename type >
  40. reversed_container< type > // type is `type` or `type const` or `type &` or `type const &`
  41. reverse(type && _container)
  42. {
  43.     return std::forward< type >(_container);
  44. }
  45.  
  46. using namespace std::string_literals;
  47.  
  48. int
  49. main()
  50. {
  51.     std::deque< int > ref_{1, 2, 3, 4, 5};
  52.     for (int & i : reverse(ref_)) {
  53.         std::cout << i << std::endl;
  54.     }
  55.     std::cout << std::endl;
  56.    
  57.     std::list< double > const cref_{0.1, 0.2, 0.3, 0.4, 0.5};
  58.     for (double const & d : reverse(cref_)) {
  59.         std::cout << d << std::endl;
  60.     }
  61.     std::cout << std::endl;
  62.    
  63.     for (typename std::string::value_type & ch : reverse("abcdef"s)) {
  64.         std::cout << std::move(ch) << std::endl;
  65.     }
  66.     return EXIT_SUCCESS;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment