Числовые типы. Подмножества элементов в массивах значений

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

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

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

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

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

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

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

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

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

  • срезы;
  • обобщенные срезы;
  • отбор по логическому признаку;
  • перечисляемые подмножества.

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

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий