Шаг 289.
Библиотека STL. Алгоритмы STL. Модифицирующие алгоритмы. Замена элементов. Замена внутри интервала

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

    Для выполнения указанных действий можно воспользоваться следующими алгоритмами:

  void
  replace (ForwardIterator beg, ForwardIterator end, 
           const T& oldValue, const T& newValue)
  void
  replace_if (ForwardIterator beg, ForwardIterator end, 
              UnaryPredicate op, const T& newValue)

    Алгоритм replace() заменяет все элементы интервала [beg,end), равные oldValue, значением newValue.

    Алгоритм replace_if() заменяет все элементы интервала [beg,end), для которых унарный предикат ор(elem) возвращает true, значением newValue.

    Предикат ор не должен изменять свое состояние во время вызова.

    Сложность линейная (numberOfElements сравнений или вызовов ор соответственно).

    Пример использования алгоритмов replace() и replace_if().

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

#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()
{
  list<int> coll;

  INSERT_ELEMENTS(coll,2,7);
  INSERT_ELEMENTS(coll,4,9);
  PRINT_ELEMENTS(coll,"Исходный список:\n");

  // Замена всех элементов, равных 6, значением 42
  replace (coll.begin(), coll.end(),     // Интервал
           6,                            // Старое значение
           42);                          // Новое значение
  PRINT_ELEMENTS(coll,"Список после первой замены:\n");

  // Замена всех элементов, меньших 5, значением 0
  replace_if (coll.begin(), coll.end(),  // Интервал
              bind2nd(less<int>(),5),    // Критерий замены
              0);                        // Новое значение
  PRINT_ELEMENTS(coll,"Список после второй замены:\n");


  getch();
  return 0;
}

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

    Результат выполнения программы выглядит так:


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

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




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