|
Программирование >> Операторы преобразования типа
valarray<slze t> 1dx(4; 1dx[0] = 8, 1dx[l] = 0 idx[2] = 3 1dx[3] = 7 Вывод девятого, первого, четвертого и восьмого элементов с использованием перечисляемого подмножества рг1 ntValarray(valarray<double>(va[1dx]). 4); Изменение первого и четвертого элементов и повторный вывод перечисляемого подмножества va[0] = 11,11; va[3] = 44.44; printValarray(valarray<double>(va[idx]), 4): Выбор второго, третьего, шестого и девятого элементов и присваивание им 99 idx[Q] = 1 idx[l] = 2: idx[2] = 5: idx[3] -vaLidx] = 99; Вывод всего массива значений printValarray (va. 4): Переменная idx используется для определения подмножеств элементов массива значений va. Результат выполнения программы выглядит так: 1.01 2.02 3.03 4.04 5.05 6.06 7.07 8.08 9.09 10.1 11.11 12.12 9.09 1,01 4.04 8.08 9.09 11.11 44.44 8.08 11.11 99 99 44,44 5.05 99 7.07 8.08 99 10.1 11.11 12.12 Строение класса valarray в поддержке массивов значений центральное место занимает класс valarrayo. Он определяется кйк шаблонный класс, параметризованный по типу элементов: namespace std{ template <class Т> class valarray; Размер не является частью типа. Это означает, что теоретически вы можете обрабатывать массивы значений разных размеров и изменять размеры. Тем не менее изменение размера поддерживается только для двухшаговой инициализации (создание и изменение размера), неизбежной при работе с массивами значений. Учтите, что результат объединения массивов разных размеров не определен. Операции создания, копирования и удаления vdldrrdy: :valarray {) О Конструктор по умолчанию. О Создает пустой массив значений. О Конструктор определен только для создания массивов, элементами которых являются массивы значений. Следующим шагом должно быть назначение правильного размера функцией resize(). expHtit Vdldrrdy: .\iaarray {s1ze t пит) О Создает массив значений, содержащий пит элементов. О Элементы инициализируются конструктором по умолчанию (О для базовых типов данных). valдггау: :\/а]array (const Т& value. size t пит) О Создает массив значений, содержащий пит элементов. О Элементы инициализируются значением value. О Обратите внимание на нестандартный порядок следования параметров. В интерфейсе остальных классов стандартной библиотеки С++ параметр пит идет первым, а параметр value ~ вторым. i/d/array:; val array (const T* array, s1ze t num) О Создает массив значений, содержащий пит элементов. О Элементы инициализируются значениями элементов массива airay. О Перед вызовом необходимо убедиться в том, что массив array содержит не менее пит элемстггов; в противном случае вызов приводит к непредсказуемым последствиям, vd/drray:: val array (const valarrayb. va) О Копирующий конструктор. о Создает массив значений как копию va. valarray: [-jа]array О О Деструктор. О Уничтожает все элементы и освобождает память. Вдобавок массивы значений могут создаваться объектами внутренних вспомогательных классов slice array, gslice array, mask array и indirect array. За подробностями обращайтесь соответственно на с. 551, 553, 554 и 555. В предыдущих версиях STL эта операция выполнялась функцией ЙП(). В предыдущих версиях STL функция size() называлась length(). Операции присваивания valarray va/array::operator= (const valarray va) О Присваивает элементы массива значений va. О Если массив va имеет другой размер, присваивание приводит к непредсказуемым последствиям. О Значение элемента в левой части любой операции присваивания массиву значений не должно зависеть от значений других элементов, находящихся в левой части. Другими словами, если операция присваивания перезаписывает значения, используемые в правой части операции присваивания, это приводит к непредсказуемым последствиям. Следовательно, элементы из левой части вообще не могут указываться в выражении, находящемся в правой части. Это ограничение объясняется тем, что порядок вычисления результата при обработке массивов значений не определен. Дополнительная информация приведена на с. 532 и 536. valarray valarray: .operator= (const Т& value) О Присваивает value каждому элементу массива значений О Размер массива значений не изменяется, указатели и ссылки на элементы остаются действительными. Вдобавок допускается присваивание значений внутренних вспомогательных классов slice array, gslice array, mask array и indirect array. За подробностями обращайтесь соответственно на с. 551, 553, 554 и 555. Функции класса Класс valarray определяет следующие функции. s1ze t valarray: :size () const Возвращает текущее количество элементов. void ia/array::resize (s1ze t пит) void /array::resize (sizet num, T value) О Обе формы изменяют размер массива значений до величины пит. О При увеличении размера новые элементы инициализируются конструктором по умолчанию или значением value соответственно. О Обе формы делают недействительными все указатели и ссылки на элементы массива значений. О Функции поддерживаются только для создания массивов, элементами которых являются массивы значений. После создания массива значений конструктором по умолчанию следует задать его правильный размер вызовом resizeO.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |