Стенли Липпман - Язык программирования C++. Пятое издание
- Название:Язык программирования C++. Пятое издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2014
- Город:Москва
- ISBN:978-5-8459-1839-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стенли Липпман - Язык программирования C++. Пятое издание краткое содержание
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com
Язык программирования C++. Пятое издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
string str("1111111000000011001101");
bitset<32> bitvec5(str, 5, 4); // четыре бита, начиная с str[5] - 1100
bitset<32> bitvec6(str, str.size()-4); // использует четыре последних
// символа
Здесь набор битов bitvec5
инициализируется подстрокой str
, начиная с символа str[5]
, и четырьмя символами далее. Как обычно, крайний справа символ подстроки представляет бит самого низкого порядка. Таким образом, набор bitvec5
инициализируется битами с позиции 3 до 0 и получает значение 1100, а остальные биты — 0. Инициализатор набора битов bitvec6
передает строку и отправную точку, поэтому он инициализируется символами строки str
, начиная с четвертого и до конца строки str
. Остаток битов набора bitvec6
инициализируется нулями. Эти инициализации можно представить так:

Упражнение 17.9. Объясните битовую схему, которую содержит каждый из следующих объектов bitset
:
(a) bitset<64> bitvec(32);
(b) bitset<32> bv(1010101);
(c) string bstr; cin >> bstr; bitset<8> bv(bstr);
17.2.2. Операции с наборами битов
Операции с наборами битов (табл. 17.3) определяют различные способы проверки и установки одного или нескольких битов. Класс bitset
поддерживает также побитовые операторы, которые рассматривались в разделе 4.8. Применительно к объектам bitset
эти операторы имеют тот же смысл, что и таковые встроенные операторы для типа unsigned
.
Таблица 17.3. Операции с наборами битов
b.any() |
Установлен ли в наборе b хоть какой-нибудь бит? |
b.all() |
Все ли биты набора b установлены? |
b.none() |
Нет ли в наборе b установленных битов? |
b.count() |
Количество установленных битов в наборе b |
b.size() |
Функция constexpr (см. раздел 2.4.4), возвращающая количество битов набора b |
b.test(pos) |
Возвращает значение true , если бит в позиции pos установлен, и значение false в противном случае |
b.set(pos, v) b.set() |
Устанавливает для бита в позиции pos логическое значение v . По умолчанию v имеет значение true . Без аргументов устанавливает все биты набора b |
b.reset(pos) b.reset() |
Сбрасывает бит в позиции pos или все биты набора b |
b.flip(pos) b.flip() |
Изменяет состояние бита в позиции pos или все биты набора b |
b[pos] |
Предоставляет доступ к биту набора b в позиции pos ; если набор b константен и бит установлен, то b[pos] возвращает логическое значение true , а в противном случае — значение false |
b.to_ulong() b.to_ullong() |
Возвращает значение типа unsigned long или типа unsigned long long с теми же битами, что и в наборе b . Если битовая схема в наборе b не соответствует указанному типу результата, передается исключение overflow_error |
b.to_string(zero, one) |
Возвращает строку, представляющую битовую схему набора b . Параметры zero и one имеют по умолчанию значения '0' и '1' . Они используют для представления битов 0 и 1 в наборе b |
os << b |
Выводит в поток os биты набора b как символы '0' и '1' |
is >> b |
Читает символы из потока is в набор b . Чтение прекращается, когда следующий символ отличается от 1 или 0 либо когда прочитано b.size() битов |
Некоторые из функций, count()
, size()
, all()
, any()
и none()
, не получают аргументов и возвращают информацию о состоянии всего набора битов. Другие, set()
, reset()
и flip()
, изменяют состояние набора битов. Функции-члены, изменяющие набор битов, допускают перегрузку. В любом случае версия функции без аргументов применяет соответствующую операцию ко всему набору, а версии функций, получающих позицию, применяют операцию к заданному биту:
bitset<32> bitvec(1U); // 32 бита; младший бит 1, остальные биты - 0
bool is_set = bitvec.any(); // true, установлен один бит
bool is_not_set = bitvec.none(); // false, установлен один бит
bool all_set = bitvec.all(); // false, только один бит установлен
size_t onBits = bitvec.count(); // возвращает 1
size_t sz = bitvec.size(); // возвращает 32
bitvec.flip(); // инвертирует значения всех битов в bitvec
bitvec.reset(); // сбрасывает все биты в 0
bitvec.set(); // устанавливает все биты в 1
Функция
any()
возвращает значение true
, если один или несколько битов объекта класса bitset
установлены, т.е. равны 1. Функция none()
, наоборот, возвращает значение true
, если все биты содержат нуль. Новый стандарт ввел функцию all()
, возвращающую значение true
, если все биты установлены. Функции count()
и size()
возвращают значение типа size_t
(см. раздел 3.5.2), равное количеству установленных битов, или общее количество битов в объекте соответственно. Функция size()
— constexpr
, а значит, она применима там, где требуется константное выражение (см. раздел 2.4.4).
Функции flip()
, set()
, reset()
и test()
позволяют читать и записывать биты в заданную позицию:
bitvec.flip(0); // инвертирует значение первого бита
bitvec.set(bitvec.size() - 1); // устанавливает последний бит
bitvec.set(0, 0); // сбрасывает первый бит
bitvec.reset(i); // сбрасывает i-й бит
bitvec.test(0); // возвращает false, поскольку первый бит сброшен
Оператор индексирования перегружается как константный. Константная версия возвращает логическое значение true
, если бит по заданному индексу установлен, и значение false
в противном случае. Неконстантная версия возвращает специальный тип, определенный классом bitset
, позволяющий манипулировать битовым значением в позиции, заданной индексом:
bitvec[0] = 0; // сбрасывает бит в позиции 0
bitvec[31] = bitvec[0]; // устанавливает последний бит в то же
// состояние, что и первый
bitvec[0].flip(); // инвертирует значение бита в позиции 0
~bitvec[0]; // эквивалентная операция; инвертирует бит
// в позиции 0
bool b = bitvec[0]; // преобразует значение bitvec[0] в тип bool
Функции to_ulong()
и to_ullong()
возвращают значение, содержащее ту же битовую схему, что и объект класса bitset
. Эти функции можно использовать, только если размер набора битов меньше или равен размеру типа unsigned long
для функции to_ulong()
и типа unsigned long long
для функции to_ullong()
соответственно:
Интервал:
Закладка: