fork download
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <iterator>
  4. #include <list>
  5. #include <map>
  6. #include <string>
  7.  
  8. typedef std::pair<int, std::string> InputPair;
  9. typedef std::map<int, std::string> InputContainer;
  10. typedef std::list<std::string> OutputContainer;
  11.  
  12. void copyPart_Ver1( OutputContainer& oc, const InputContainer& ic )
  13. {
  14. for( InputContainer::const_iterator it=ic.begin(); it!=ic.end(); ++it )
  15. {
  16. oc.push_back(it->second);
  17. }
  18. }
  19.  
  20. struct TakeSecond
  21. {
  22. std::string operator()( const InputPair& p ) const
  23. {
  24. return p.second;
  25. }
  26. };
  27.  
  28. void copyPart_Ver2( OutputContainer& oc, const InputContainer& ic )
  29. {
  30. std::transform(ic.begin(), ic.end(), std::back_inserter(oc), TakeSecond() );
  31. }
  32.  
  33. int main() {
  34.  
  35. InputContainer ic;
  36.  
  37. ic[1] = "one";
  38. ic[2] = "two";
  39.  
  40. std::ostream_iterator<std::string> oi( std::cout, " " );
  41.  
  42. OutputContainer oc1;
  43. copyPart_Ver1( oc1, ic );
  44. std::copy( oc1.begin(), oc1.end(), oi );
  45. std::cout << std::endl;
  46.  
  47. OutputContainer oc2;
  48. copyPart_Ver2( oc2, ic );
  49. std::copy( oc2.begin(), oc2.end(), oi );
  50. std::cout << std::endl;
  51.  
  52. return 0;
  53. }
Success #stdin #stdout 0s 3432KB
stdin
Standard input is empty
stdout
one two 
one two