Программирование >>  Операторы преобразования типа 

1 ... 139 140 141 [ 142 ] 143 144 145 ... 239


приоритетндя очврвдь: :\)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]) { ...

Представление двоичных данных при вводе-выводе

Другая полезная возможность битовых полей - преобразование целых чисел в последовательность битов и наоборот. Задача решается простым созданием временного битового поля:



1 ... 139 140 141 [ 142 ] 143 144 145 ... 239

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика