Поделиться через


copy_backward

Присвоит значения элементов из диапазона источника к диапазону назначения, повторяя через последовательность источника элементов и при присвоении ним новые позиции направление обратно.

template<class BidirectionalIterator1, class BidirectionalIterator2>
   BidirectionalIterator2 copy_backward(
      BidirectionalIterator1 _First, 
      BidirectionalIterator1 _Last,
      BidirectionalIterator2 _DestEnd
   );

Параметры

  • _First
    Двунаправленный итератор адресацию положение первого элемента в диапазоне источника.

  • _Last
    Двунаправленный итератор адресацию позиция, одно за final элементом в диапазоне источника.

  • _DestEnd
    Двунаправленный итератор final адресации позиция одного за элементом в диапазоне назначения.

Возвращаемое значение

Итератор выхода за адресации позиция, одно final элементом в диапазоне назначения, т е итераторе решает *_DestEnd *– (_Last – _First ).

Заметки

Диапазон источника должен быть допустимым и должен иметь достаточно места на стороне назначения, чтобы сохранить все, скопированными элементами.

Алгоритм copy_backward налагает более строгие требования, которые не были алгоритм копии.Итераторы и его входных и выходных данных должны быть двухнаправленны.

Алгоритм copy_backward единственный стандартного алгоритма библиотеки стандартных шаблонов, обозначающая диапазон вывода с итератор, указывающий конец диапазона назначения.

Поскольку алгоритм копирует элементы источника в начале заказа с последним элементом, диапазон назначения могут перекрываться с диапазоном источника, предоставленные положение диапазона _First источника не содержится в диапазоне назначения.copy_backward можно использовать для сдвигать элементов вправо, но не левого, если нет никакого перекрытия между источником и диапазонами назначения.Чтобы сдвигать к выйденное любое количество позиций, используется алгоритм копия.

Алгоритм copy_backward только изменяет значения к итераторам, указанные при присвоении новые значения в диапазоне элементов назначения.Его нельзя использовать для создания новых элементов и не может вставлять элементы в пустой контейнер напрямую.

copy_backward имеет значение 2, связанных форм:

Сведения о том, как эти функции ведут себя см. в разделе Проверяемые итераторы.

Пример

// alg_copy_bkwd.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <iostream>

int main() {
   using namespace std;
   vector <int> v1, v2;
   vector <int>::iterator Iter1, Iter2;

   int i;
   for ( i = 0 ; i <= 5 ; i++ )
      v1.push_back( 10 * i );

   int ii;
   for ( ii = 0 ; ii <= 10 ; ii++ )
      v2.push_back( 3 * ii );

   cout << "v1 = ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")" << endl;

   cout << "v2 = ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
      cout << *Iter2 << " ";
   cout << ")" << endl;

   // To copy_backward the first 3 elements of v1 into the middle of v2
   copy_backward( v1.begin( ), v1.begin( ) + 3, v2.begin( ) + 7 );

   cout << "v2 with v1 insert = ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
      cout << *Iter2 << " ";
   cout << ")" << endl;

   // To shift the elements inserted into v2 two positions
   // to the right
   copy_backward( v2.begin( )+4, v2.begin( ) + 7, v2.begin( ) + 9 );

   cout << "v2 with shifted insert = ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
      cout << *Iter2 << " ";
   cout << ")" << endl;
}

Output

v1 = ( 0 10 20 30 40 50 )
v2 = ( 0 3 6 9 12 15 18 21 24 27 30 )
v2 with v1 insert = ( 0 3 6 9 0 10 20 21 24 27 30 )
v2 with shifted insert = ( 0 3 6 9 0 10 0 10 20 27 30 )

Требования

заголовок: <algorithm>

std пространство имен:

См. также

Ссылки

Стандартная библиотека шаблонов