Шаг 432.
Библиотека STL.
Числовые типы. Подмножества элементов в массивах значений

    На этом шаге мы приведем общие сведения о построении и использовании подмножества элементов.

    Оператор индексирования [] перегружается для специальных вспомогательных объектов, различными способами определяющих подмножества элементов. Перегрузка обеспечивает элегантный механизм выполнения операций с частью элементов массива (с доступом как для чтения, так и для записи).

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

  va[std::slice(2,4,3)]    // Четыре элемента на расстоянии 3,
                                  // начиная с индекса 2
  va[va>7]  // Все элементы со значением, большим 7

    Если определение подмножества (такое, как std::slice(2,4,3) или va>7) используется с константным массивом значений, то выражение возвращает новый массив значений с соответствующими элементами. Но если определение подмножества используется с неконстантным массивом значений, то выражение возвращает временный объект специального вспомогательного класса. Временный объект содержит не данные подмножества, а только его определение. Обработка выражений откладывается до того момента, когда для получения окончательного результата потребуются данные.

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

    С другой стороны, отложенные вычисления могут дать неожиданные результаты в ситуациях, когда элементы приемного множества также присутствуют в исходном множестве. По этой причине любые операции с массивами значений гарантированно работают только в том случае, если исходное и приемное множества не имеют общих элементов.

    Хорошо продуманное определение подмножеств позволяет наделить массивы значений семантикой двух и более измерений. Это означает, что массивы значений могут использоваться в качестве многомерных массивов.

    Существуют четыре варианта определения подмножеств в массивах значений:

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

    На следующем шаге мы рассмотрим проблемы с подмножествами элементов массивов значений.




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