Повышаю. MultiArray определяет класс массива,multi_arrayи два адаптерных классаmulti_array_refиconst_multi_array_ref. Три класса модели MultiArray и поэтому они имеют много функций.multi_array_refОтличается отmulti_arrayв том, чтомульти-мультипликаторуправляет собственной памятью, в то время какmulti_array_refПередается блок памяти, которым предполагается управлять извне.const_multi_array_refотличается отmulti_array_refв том, что базовые элементы, которые он адаптирует, не могут быть изменены через его интерфейс, хотя некоторые свойства массива, включая форму массива и базы индексов, могут быть изменены. Функциональность, которую имеют классы, описана ниже.
Примечание: Предварительные условия, эффекты и реализация. В следующих разделах используются небольшие фрагменты кода C++ для указания ограничений, таких как предварительные условия, эффекты и постусловия. Они не обязательно описывают базовую реализацию компонентов массива; скорее, они описывают ожидаемый вход и поведение указанных операций. Невыполнение предварительных условий приводит к неопределенному поведению. Не все эффекты (например, конструкторы копий и т. д.) должны точно имитироваться. Сниппеты кода для эффектов предназначены для захвата сущности описанной операции.
Вопросы.
element* data();
const element* data() const;
Это возвращает указатель к началу смежного блока, который содержит данные массива. Если все размеры массива 0-индексированы и хранятся в порядке возрастания, это эквивалентноисточнику().. Обратите внимание, чтоconst_multi_array_refпредоставляет только конст-версию этой функции.
element* origin();
const element* origin() const;
Это возвращает исходный элементmulti_array. Обратите внимание, чтоconst_multi_array_refпредоставляет только конст-версию этой функции. (перенаправлено с «MultiArray»)
const index* index_bases();
Это возвращает индексные базы дляmulti_array. (перенаправлено с «MultiArray»)
const index* strides();
Это возвращает шаги длямульти-массив. (перенаправлено с «MultiArray»)
const size_type* shape();
Это возвращает формуmulti_array. (перенаправлено с «MultiArray»)
Это меняет формуmulti_array. Число элементов и индексные базы остаются неизменными, но число значений на каждом уровне вложенной иерархии контейнеров может меняться.
SizeListТребования. SizeListдолжна быть модельюКоллекция.
multi_array— многомерный контейнер, поддерживающий итерацию случайного доступа. Его количество измерений фиксируется во время компиляции, но его форма и количество элементов, которые он содержит, уточняются при его построении. Количество элементов будет оставаться фиксированным в течение срока службымноголучевой матрицы, но форма контейнера может быть изменена.multi_arrayуправляет своими элементами данных с помощью сменного распределителя.
Это создаетmulti_arrayс использованием заданных параметров.размерыопределяют форму построенногомноголучевого массива.хранилищеопределяет порядок хранения или компоновку в памяти размеров массива.аллокиспользуется для выделения содержащихся элементов.
ExtentList Requirements. ExtentList must model Collection.
Это создаетmulti_arrayс использованием заданных параметров.диапазоныопределяют форму и индексные основания построенного многолучевого массива. Это результатNumDimsпривязанных вызововextent_gen::operator[].storeопределяет порядок хранения или компоновку в памяти размеров массива.alloc— это распределитель, используемый для выделения памяти, используемой для храненияэлементов multi_array.
Эта функция изменяет размер массива до формы, указанной встепени, которая является либо сгенерированным списком степеней, либо моделью концепцииCollection. Содержимое массива сохраняется, когда это возможно; если новый размер массива меньше, то некоторые данные будут потеряны. Любые новые элементы, созданные путем изменения размера массива, инициализируются с помощью конструктора по умолчаниюэлемента.
Вопросы.
storage_order_type& storage_order() const;
Этот запрос возвращает объект заказа хранения, связанный сmulti_array. Он может быть использован для создания нового массива с тем же порядком хранения.
multi_array_ref
multi_array_ref— многомерный контейнерный адаптер. Он обеспечивает интерфейс MultiArray над любым смежным блоком элементов.multi_array_refэкспортирует тот же интерфейс, что иmulti_array, за исключением конструкторов.
Модель Of. multi_array_refмоделиMultiArray,CopyConstructibleи в зависимости от типа элемента, он также может моделироватьEqualityComparableиLessThanComparable. Подробные описания приведены здесь только для операций, которые не описаны в ссылкеmulti_array.
Это создаетmulti_array_refс использованием заданных параметров.размерыопределяют форму построенногоmulti_array_ref.хранилищеопределяет порядок хранения или компоновку в памяти размеров массива.allocиспользуется для выделения содержащихся элементов.
ExtentList Requirements. ExtentList must model Collection.
Предпосылки. Размеры.размер() == NumDims
explicit multi_array_ref(element* data,
extent_gen::gen_type<NumDims>::type ranges,
const storage_order& store = c_storage_order());
Это создаетmulti_array_refс использованием заданных параметров.диапазоныопределяют форму и индексные основания построенного мульти-мультипликатора. Это результатNumDimsпривязанных вызововextent_gen::operator [].storeопределяет порядок хранения или компоновку в памяти размеров массива.
multi_array_ref(const multi_array_ref& x);
Это создает неглубокую копиюx.
Сложность. Постоянное время (для сравнения, сравните это смноголучевымконструктором копий класса).
const_multi_array_ref is a multi-dimensional container
adaptor. It provides the MultiArray interface over any contiguous
block of elements. const_multi_array_ref exports the
same interface as multi_array, with the exception
of the constructors.
Модель Of. const_multi_array_refмоделиMultiArray,CopyConstructible. и в зависимости от типа элемента, он также может моделироватьEqualityComparableиLessThanComparable. Подробные описания приведены здесь только для операций, которые не описаны в ссылкеmulti_array.
Конструируетconst_multi_array_refс использованием заданных параметров.размерыопределяют форму построенногоconst_multi_array_ref.хранилищеопределяет порядок хранения или компоновку в памяти размеров массива.
ExtentList Requirements. ExtentList must model Collection.
Предпосылки. Размеры.размер() == NumDims
explicit const_multi_array_ref(TPtr data,
extent_gen::gen_type<NumDims>::type ranges,
const storage_order& store = c_storage_order());
Эффекты. Конструируетconst_multi_array_refс использованием заданных параметров.диапазоныопределяют форму и индексные основания построенного const_multi_array_ref. Это результатNumDimsпривязных вызовов кextent_gen::operator.storeопределяет порядок хранения или компоновку в памяти размеров массива.
Статья Array Components раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 25. Boost.MultiArray Reference Manual может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.