C++ Программирование в среде С++ Builder 5



             

Итераторы - часть 5


Алгоритм random_shuffle, также требующий итераторов произвольного доступа, случайным образом переставляет значения элементов в указанном диапазоне контейнера:

template <class RandomAccessIterator>

void random shuffle(RandomAccessIterator first, RandomAccessIterator last);

Итераторы вставки

Для вставки значений в контейнер применяются итераторы вставки. Их называют также адаптерами, поскольку они преобразуют контейнер в итератор, т. е. адаптируют его к специальному использованию в алгоритмах вроде copy (). Имеется три вида итераторов вставки:

  • Начальные адаптеры, вставляющие объекты в начало контейнера, например, списка (при этом вставленные элементы данных оказываются расположенными в порядке, обратном исходному).
  • Конечные адаптеры, присоединяющие объекты в конец контейнера.
  • Адаптеры вставки, вставляющие данные перед произвольным элементом контейнера.
  • При вставке данных в контейнер может произойти перемещение уже находившихся там данных, из-за чего некоторые итераторы станут недействительными. Это может случиться в случае вектора, но не списков, в которых данные при вставке не смещаются.

    В типичном случае адаптер вставки применяется после поиска некоторого значения, как показано в следующем примере.

    ////////////////////////////////////////////////////////////////

    // Inserter.срр: Демонстрация итераторов вставки. //

    #include <algorithm>

    #include <list>

    #include <iostream>

    #pragma hdrstop

    #include <condefs.h>

    using namespace.std;

    int iArr[5] = (1, 2, 3, 4, 5);

    //

    // Функция вывода содержимого списка.

    //

    void Display(list<int> &1, const char *label)

    (

    cout << label<< ": { ";

    copy (1 .begin (), 1.end(),

    ostream_iterator<int>(cout, " "));

    cout << "}" << endl;

    }

    int main(void) {

    list<int> iLst; // Создание объекта списка.

    // Копирование массива в список в обратном порядке:

    copy(iArr, iArr + 5, front_inserter(iLst));

    Display(iLst, "Before insertion");




    Содержание  Назад  Вперед