Реализуйте алгоритм move() в стиле copy() таким образом, чтобы допускалось перекрытие входной и выходной последовательностей. Обеспечьте приемлемую эффективность в случае аргументов — итераторов произвольного доступа.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <iostream> using std::cout; using std::endl; //#include <algorithm> //using std::copy; #include <vector> using std::vector; template<class InputIterator, class OutputIterator> OutputIterator move1 (InputIterator first, InputIterator last, OutputIterator result) { while (first!=last) { *result = *first; ++result; ++first; } return result; } int main() { int mass[]={1,2,3,4,5,6,7}; vector<int> v1(mass,mass+7); vector<int> v(7); move1(v1.begin(),v1.end(),v.begin()); for(int i=0;i<v.size();i++) cout <<v[i]<<' '; cout <<endl; return 0; } |
[youtube]http://www.youtube.com/watch?v=hZImH7a-2WE[/youtube]