// copy_backward.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <algorithm> #include <vector> #include <iterator> #include <iostream> using namespace std; class print_elements { public: void operator() (const string& elem) { cout << elem.c_str(); if (_line_cnt++ % 8) { cout << " "; } else { cout << "/n/t"; } //<< (_line_cnt++ % 8 ? _T(" "): _T("/n/t")); } static void reset_line_cnt() { _line_cnt = 1; } private: static int _line_cnt; }; int print_elements::_line_cnt = 1; /*------------------------------------------------------------------------*/ template<typename BidirectionalIterator1, typename BidirectionalIterator2> BidirectionalIterator2 my_copy_backward(BidirectionalIterator1 first, BidirectionalIterator1 last, BidirectionalIterator2 result) { while (first != last) { *--result = *--last; } return result; } /*------------------------------------------------------------------------*/ /*------------------------------------------------------------------------*/ template<typename BidirectionalIterator1, typename BidirectionalIterator2> BidirectionalIterator2 my_copy(BidirectionalIterator1 first, BidirectionalIterator1 last, BidirectionalIterator2 result) { while (first != last) { *result++ = *first++; } return result; } /*------------------------------------------------------------------------*/ int main(int argc, char* argv[]) { string sa[] ={ "The", "light", "untonsured", "hair", "grained", "and", "hued", "like", "pale", "oak" }; vector<string> svec(sa, sa+10); cout << "Original list of strings:/n/t"; for_each(svec.begin(), svec.end(), print_elements()); cout << "/n/n"; vector<string> my_vec; vector<string> back_vec; my_vec.resize(10); back_vec.resize(10); my_copy_backward(svec.begin() + 1, svec.end() - 3, back_vec.end()); my_copy(svec.begin() + 1, svec.end() - 3, my_vec.begin()); print_elements::reset_line_cnt(); cout << "sequence after " << "copy_backward(begin+1, end-3, end):/n"; for_each(back_vec.begin(), back_vec.end(), print_elements()); print_elements::reset_line_cnt(); cout << "sequence after " << "copy(begin+1, end-3, end):/n"; for_each(my_vec.begin(), my_vec.end(), print_elements()); cout << "/n"; return 0; } /* template<class _II, class _Fn> inline _Fn for_each(_II _F, _II _L, _Fn _Op) { for (; _F != _L; ++_F) _Op(*_F); return (_Op); } */