С++ для начинающих


Алгоритм copy()


template < class InputIterator, class OutputIterator >

OutputIterator

copy( InputIterator first1, InputIterator last,

      OutputIterator first2 )

copy() копирует последовательность элементов, ограниченную парой итераторов [first,last), в другой контейнер, начиная с позиции, на которую указывает first2. Алгоритм возвращает итератор, указывающий на элемент второго контейнера, следующий за последним вставленным. Например, если дана последовательность {0,1,2,3,4,5}, мы можем сдвинуть элементы на один влево с помощью такого вызова:

int ia[] = {0, 1, 2, 3, 4, 5 };

// сдвинуть элементы влево на один, получится {1,2,3,4,5,5}

copy( ia+1, ia+6, ia );

copy() начинает копирование со второго элемента ia, копируя 1 в первую позицию, и так далее, пока каждый элемент не окажется в позиции на одну левее исходной.

#include <algorithm>

#include <vector>

#include <iterator>

#include <iostream.h>

/* печатается:

   0 1 1 3 5 8 13

   сдвиг массива влево на 1:

   1 1 3 5 8 13 13

   сдвиг вектора влево на 2:

   1 3 5 8 13 8 13

*/

int main()

{

           int ia[] = { 0, 1, 1, 3, 5, 8, 13 };

           vector< int, allocator > vec( ia, ia+7 );

     ostream_iterator< int >  ofile( cout, " " );

                 

     cout << "исходная последовательность элементов:\n";

     copy( vec.begin(), vec.end(), ofile ); cout << '\n';

 

           // сдвиг влево на один элемент

           copy( ia+1, ia+7, ia );

     cout << "сдвиг массива влево на 1:\n";

     copy( ia, ia+7, ofile ); cout << '\n';

 

           // сдвиг влево на два элемента

           copy( vec.begin()+2, vec.end(), vec.begin() );

                 

     cout << "сдвиг вектора влево на 2:\n";

     copy( vec.begin(), vec.end(), ofile ); cout << '\n';

}




- Начало -  - Назад -  - Вперед -