Шаг 19.
Библиотека STL.
Алгоритмы. Удаление и замена элементов

    На этом шаге мы рассмотрим алгоритмы удаления и замены элементов.

    В следующей программе демонстрируется использование алгоритмов remove_copy() и replace_copy(). При ее выполнении создается последовательность символов, из которой удаляются все буквы 'т'. Затем выполняется замена всех букв 'o' буквами 'X'.

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

#include <vcl.h>
#include <iostream>
#include <vector>
#include <algorithm>
#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(int argc, char* argv[])
{
  char str[] = "Это очень простой тест.";
  vector<char> v, v2(30);
  unsigned int i;

  for(i=0; str[i]; i++) v.push_back(str[i]);

  // Демонстрация алгоритма remove_copy

  cout << ToRus("Входная последовательность: ");
  for(i=0; i<v.size(); i++)
  {
     char c[2];
     c[0]=v[i];c[1]='\0';
     CharToOem(c,c);
     cout << c;
  }
  cout << endl;

  // Удаляем все буквы 'т'.
  remove_copy(v.begin(), v.end(), v2.begin(), 'т');

  cout << ToRus("После удаления букв 'т': ");
  for(i=0; v2[i]; i++)
  {
     char c[2];
     c[0]=v2[i];c[1]='\0';
     CharToOem(c,c);
     cout << c;
  }
  cout << endl << endl;

  // Демонстрация алгоритма replace_copy
  cout << ToRus("Входная последовательность: ");
  for(i=0; i<v.size(); i++)
  {
     char c[2];
     c[0]=v[i];c[1]='\0';
     CharToOem(c,c);
     cout << c;
  }
  cout << endl;
  // Заменяем буквы 'о' буквами 'X'
  replace_copy(v.begin(), v.end(), v2.begin(), 'о', 'X');

  cout << ToRus("После замены букв 'о' буквами 'X': ");
  for(i=0; v2[i]; i++)
  {
     char c[2];
     c[0]=v2[i];c[1]='\0';
     CharToOem(c,c);
     cout << c;
  }
  cout << endl << endl;

  getch();
  return 0;
}
//---------------------------------------------------------------------------
Текст этого примера можно взять здесь.

    Результаты выполнения этой программы представлены на рисунке 1.


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

    На следующем шаге мы рассмотрим алгоритм реверсирования последовательности.




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