fork(2) download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. template < typename Cont, typename Filt, typename Tran >
  5. auto filter( Cont& cnt, Filt func, Tran tran ) -> std::vector< decltype( tran(cnt[0] ) ) >
  6. {
  7. std::vector< decltype( tran( cnt[0] ) ) > ret;
  8. for ( auto& item : cnt ) if ( func( item ) ) ret.push_back( tran( item ) );
  9. return ret;
  10. }
  11.  
  12. int main( void )
  13. {
  14. std::vector< int > numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  15.  
  16. auto is_odd = []( const int x ) { return x % 2 == 1; };
  17.  
  18. auto transform = []( int& x ){ return &x; };
  19.  
  20. auto odd_numbers = filter( numbers, is_odd, transform );
  21.  
  22. for ( const auto& odd_number : odd_numbers )
  23. std::cout << *odd_number << '\n';
  24. }
Success #stdin #stdout 0s 3428KB
stdin
Standard input is empty
stdout
1
3
5
7
9