// reverse.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <algorithm> #include <list> #include <string> #include <iostream> /* * ハ莎・ Original sequence of strings: Signature of all things I am here to read seaspawn and seawrack that rusty boot Sequence after reverse() applied: boot rusty that seawrack and seaspawn read to here am I things all of Signature */ using namespace std; class print_elements { public: void operator()( const string& elem ) { cout << elem << ( _line_cnt++%8 ? " " : "/n/t" ); } static void reset_line_cnt() { _line_cnt = 1; } private: static int _line_cnt; }; int print_elements::_line_cnt = 1; /********************************************************************/ template<class _BI> inline void my_Reverse(_BI _F, _BI _L) { for (; _F != _L && _F != --_L; ++_F) iter_swap(_F, _L); } template<class _BI, class _OI> inline _OI my_reverse_copy(_BI _F, _BI _L, _OI _X) { for (; _F != _L; ++_X) *_X = *--_L; return (_X); } /*template<class _RI> inline void my_Reverse(_RI _F, _RI _L) { for (; _F < _L; ++_F) iter_swap(_F, --_L); }*/ /********************************************************************/ int main(int argc, char* argv[]) { string sa[] = { "Signature", "of", "all", "things", "I", "am", "here", "to", "read", "seaspawn", "and", "seawrack", "that", "rusty", "boot" }; list< string > slist( sa, sa+15 ); cout << "Original sequence of strings:/n/t"; for_each( slist.begin(), slist.end(), print_elements() ); cout << "/n/n"; my_Reverse( slist.begin(), slist.end() ); print_elements::reset_line_cnt(); cout << "Sequence after reverse() applied:/n/t"; for_each( slist.begin(), slist.end(), print_elements() ); cout << "/n"; list< string > slist_copy( slist.size() ); reverse_copy( slist.begin(), slist.end(), slist_copy.begin() ); return 0; }