fork(1) download
  1. #include <iostream>
  2. #include <vector>
  3. #include <list>
  4. #include <algorithm>
  5. #include <iterator>
  6.  
  7. namespace my
  8. {
  9. template <typename Functor, typename SContainer>
  10. class map_proxy
  11. {
  12. public:
  13. map_proxy(Functor f, SContainer const & c)
  14. : m_f(f)
  15. , m_c(c)
  16. {
  17. }
  18.  
  19. template <typename TContainer>
  20. operator TContainer () const
  21. {
  22. TContainer c;
  23. std::transform(std::begin(m_c), std::end(m_c), std::back_inserter(c), m_f);
  24. return c;
  25. }
  26.  
  27. private:
  28. Functor m_f;
  29. SContainer const & m_c;
  30. };
  31.  
  32. template <typename Functor, typename Container>
  33. map_proxy<Functor, Container> map(Functor f, Container const & c)
  34. {
  35. return map_proxy<Functor, Container>(f, c);
  36. }
  37. }
  38.  
  39. int main()
  40. {
  41. using my::map;
  42.  
  43. std::vector<double> numbers = { 0.3, 0.4, 0.5, 0.6, 0.7 };
  44. std::list<int> result = map(
  45. [](double n) -> int { return static_cast<int>(n * 2.0 + 1) / 2; },
  46. numbers
  47. );
  48.  
  49. std::copy(std::begin(result), std::end(result), std::ostream_iterator<int>(std::cout, "\n"));
  50. return 0;
  51. }
  52.  
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
0
0
1
1
1