|
Программирование >> Операторы преобразования типа
приоритетндя очврвдь: :\)nontyj\[j.eue (Inputlterator beg. Inputlterator end. const CompFuncS op) О Создает приоритетную очередь с критерием сортировки ор и инициализирует ее элементами интервала [beg,end). О Данная функция объявлена как шаблонная (см. с. 28), поэтому элементы исходного интервала могут относиться к любому типу, который преобразуется к типу элементов контейнера. О Примеры передачи критерия сортировки в аргументах конструктора приведены на с. 198 и 218. приоритетная очередь: :{>riorityj][ieue (Inputlterator beg. Inputlterator end. const CompFuncS op. const Containers cont) О Создает приоритетную очередь с критерием сортировки ор и инициализирует ее элементами контейнера cont и интервала [heg,end). О Данная функция объявлена как шаблонная (см. с. 28), поэтому элементы исходного интервала могут относиться к любому типу, который преобразуется к типу элементов контейнера. Другие операции size type приоритетная очередь: .s-yze () const О Возвращает текущее количество элементов. О Для проверки отсутствия элементов в приоритетной очереди рекомендуется использовать функцию empty(), поскольку она может работать быстрее. bool приоритетная очередь:-.empty () const О Проверяет, пуста ли приоритетная очередь. О Эквивалент (но может работать быстрее): приоритетная очередь: :size()==0 void приоритетная очередь: -.pusb (const value type&. elem) Вставляет копию elem в приоритетную очередь, const valuej:ype& приоритетная очередь: -.top О const О Возвращает следующий элемент приоритетной очереди (то есть элемент с наибольшим значением среди всех элементов очереди). Если приоритетная очередь содержит сразу несколько элементов с таким значением, критерий выбора определяется реализацией. О Перед вызовом необходимо убедиться в том, что приоритетная очередь содержит хотя бы один элемент (size()>0), иначе вызов приводит к непредсказуемым последствиям. void приоритетиая очередь: :рор С) О Удаляет из приоритетной очереди следующий элемент (то есть элемент с наибольшим значением среди всех элементов очереди). Если приоритетная очередь содержит сразу несколько элементов с таким значением, критерий выбора определяется реализацией. О Функция не имеет возвращаемого значения. Чтобы обработать значение следующего элемента, следует предварительно вызвать функцию top(). О Перед вызовом необходимо убедиться в том, что приоритетная очередь содержит хотя бы один элемент (size()>0), иначе вызов приводит к непредсказуемым последствиям. Битовые поля Битовые поля моделируют массивы битов (логических величии) фиксированного размера. Они часто используются для выполнения операций с наборами независимых флагов. В программах на языке С, а также в старых программах С++ массив битов обычно представляется типом long, а операции с битами выполняются при помощи поразрядных операторов (таких, как &, [ и ~). Основные достоинства класса bitset - произвольный размер битового поля и поддержка дополнительных операций (например, присваивание значений отдельных битов, чтение и запись битовых полей как последовательности нулей и единиц). Количество битов в битовом поле остается неизменным, поскольку оно передается в параметре шаблона. Если вам потребуется контейнер с переменным количеством битов, воспользуйтесь классом vector<bool> (см. с. 167). Класс bitset определяется в заголовочном фай.ае <bitset>: Iinclude <bitset> В файле <b(tset> класс bitset определяется в виде птаблона, которому в параметре передается размер поля в битах: namespace std { template <s1ze t Bits> class bitset: В данном случае в параметре шаблона передается не тип, а беззнаковое целое значение (эта возможность рассматривается на с. 26). Шаблоны с разными аргументами определяют разные типы. Сравнение и комбинирование битовых полей разрешено только для полей с одинаковыми значениями аргумента шаблона. Примеры использования битовых полей Битовое поле как набор флагов в первом примере битовое поле интерпретируется как набор флагов. Каждый флаг представлен некоторым значением перечисляемого типа, определяющим позицию бита в поле. В нашем примере биты представляют различные цвета; таким образом, каждое значение перечисляемого типа определяет один цвет. Битовые ноля являются удобным средством для работы с переменными, содержащими произвольную комбинацию цветов: cont/bitsetl.cpp Iinclude <bitset> Iinclude <io5tream> using namespace std; int mainC) { /* enumeration type for the bits * - each bit represents a color */ enum Color { red, yellow, green, blue, white, black. numColors }; Создание битового поля для всех битов/цветов bit5et<numColors> usedColors; Установкабитов двух цветов usedColors.setCred): usedColors.set(blue); Вывод данных битового поля cout bitfield of used colors: usedColors endl; cout number of used colors: usedColors.countO endl: cout bitfield of unused colors: usedColors endl; Если в битовом поле использован хотя бы один цвет. if (usedColors.anyO) { перебрать все цвета в цикле for (int с = 0: с < numColors: ++с) { Если флаг текущего цвета установлен... if (usedColors[(Color)c]) { ... Представление двоичных данных при вводе-выводе Другая полезная возможность битовых полей - преобразование целых чисел в последовательность битов и наоборот. Задача решается простым созданием временного битового поля:
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |