Шаг 274.
Библиотека STL.
Алгоритмы STL. Поиск элементов. Поиск первого подинтервала (окончание)

    На этом шаге мы рассмотрим использование второй формы алгоритма search().

    В следующем примере вторая форма алгоритма search() используется для поиска серии элементов, определяемых более сложным критерием. В данном случае ищется серия из четного, нечетного и вновь четного элементов:

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

#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;
}

// Проверка элемента на четность
bool checkEven (int elem, bool even)
{
  if (even) {
      return elem % 2 == 0;
  }
  else {
      return elem % 2 == 1;
  }
}


int main()
{
  vector<int> coll;

  INSERT_ELEMENTS(coll,1,9);
  PRINT_ELEMENTS(coll,"Исходный вектор:\n");

  // Аргументы checkEven()
  // - проверка последовательности "чет нечет чет"
  bool checkEvenArgs[3] = { true, false, true };

  // Поиск первого подинтервала в coll
  vector<int>::iterator pos;
  pos = search (coll.begin(), coll.end(),       // Интервал
                checkEvenArgs, checkEvenArgs+3, // Значения подинтервала
                checkEven);                     // Критерий

  // Цикл повторяется до тех пор, пока внутри coll
  // успешно находится очередное вхождение подинтервала
  while (pos != coll.end()) {
      // Вывод позиции первого элемента
      cout << ToRus("Очередной подинтервал начинается с элемента ")
           << distance(coll.begin(),pos) + 1
           << endl;

      // Поиск следующего подинтервала в coll
      pos = search (++pos, coll.end(),              // Интервал
                    checkEvenArgs, checkEvenArgs+3, // Значения 
                    checkEven);                     // Критерий
  }


  getch();
  return 0;
}

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

    Программа выводит следующий результат:


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

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




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