На этом шаге мы рассмотрим различия между алгоритмами сору() и сору_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. Результат работы приложения
На следующем шаге мы закончим изучение этого вопроса.