Шаг 282.
Библиотека STL. Алгоритмы STL. Модифицирующие алгоритмы. Копирование элементов (продолжение)

    На этом шаге мы рассмотрим различия между алгоритмами сору() и сору_backward().

    Следующий пример демонстрирует различия между алгоритмами сору() и сору_backward():

//---------------------------------------------------------------------------

#include <vcl.h>
#include <iterator>
#include "algostuff.hpp"

#include <conio.h> //необходимо для getch()

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
using namespace std;

std::string ToRus(const std::string &in)
{
  char *buff = new char [in.length()+1];
  CharToOem(in.c_str(),buff);
  std::string out(buff);
  delete [] buff;
  return out;
}


int main()
{
  // Инициализация исходной коллекции символами
  //    "..........abcdef.........."
  vector<char> source(10,'.');
  for (int c='a'; c<='f'; c++) {
      source.push_back(c);
  }
  source.insert(source.end(),10,'.');
  PRINT_ELEMENTS(source,"Исходная коллекция:\n");

  // Копирование всех букв с позиции за три элемента перед 'a'
  vector<char> c1(source.begin(),source.end());
  copy (c1.begin()+10, c1.begin()+16,  // Исходный интервал
        c1.begin()+7);                 // Приемный интервал
  PRINT_ELEMENTS(c1,"Коллекция c1:\n");

  // Копирование всех букв с позиции через три элемента после 'f'
  vector<char> c2(source.begin(),source.end());
  copy_backward (c2.begin()+10, c2.begin()+16,  // Источник
                 c2.begin()+19);                // Приемник
  PRINT_ELEMENTS(c2,"Коллекция  c2:\n");


  getch();
  return 0;
}

//---------------------------------------------------------------------------
Текст этого примера можно взять здесь.

    Обратите внимание: в обоих вызовах сору() и copy_backward() третий аргумент не входит в источник. Результат выполнения программы выглядит так:


Рис.1. Результат работы приложения

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг