Стенли Липпман - Язык программирования C++. Пятое издание

Здесь есть возможность читать онлайн «Стенли Липпман - Язык программирования C++. Пятое издание» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2014, ISBN: 2014, Издательство: Издательский дом Вильямс, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Язык программирования C++. Пятое издание: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Язык программирования C++. Пятое издание»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Лучшее руководство по программированию и справочник по языку, полностью пересмотренное и обновленное под стандарт С++11!
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com

Язык программирования C++. Пятое издание — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Язык программирования C++. Пятое издание», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

// виртуальные вызовы через члены Query, lhs и rhs

// вызовы eval() возвращают QueryResult для каждого операнда

auto right = rhs.eval(text), left = lhs.eval(text);

// копировать номера строк левого операнда в результирующий набор

auto ret_lines =

make_shared>(left.begin(), left.end());

// вставить строки из правого операнда

ret_lines->insert(right.begin(), right.end());

// возвратить новый QueryResult, представляющий объединение lhs и rhs

return QueryResult(rep(), ret_lines, left.get_file());

}

Набор ret_linesинициализируется с использования того конструктора, который получает пару итераторов. Функции-члены begin()и end()класса QueryResultвозвращают итераторы на номера строк набора. Таким образом, набор ret_linesсоздается при копировании элементов из набора left. Затем для вставки элементов из набора rightвызывается функция insert(). После этого вызова набор ret_linesсодержит номера строк из наборов, которые присутствуют в наборах leftили right.

Функция eval()завершает работу, создавая и возвращая объект класса QueryResult, представляющий объединение соответствий. Конструктор QueryResult()(см. раздел 12.3.2) получает три аргумента: строку, представляющую запрос, указатель shared_ptrна набор соответствующих номеров строк и указатель shared_ptrна вектор, представляющий входной файл. Вызов функции rep()позволяет создать строку, а вызов функции get_file()— получить указатель shared_ptrна файл. Поскольку оба набора, leftи right, относятся к тому же файлу, не имеет значения, который из них использовать для функции get_file().

Функция AndQuery::eval()

Версия функции eval()класса AndQueryподобна версии класса OrQuery, за исключением того, что она использует библиотечный алгоритм для поиска строк, общих для обоих запросов:

// возвращает пересечение наборов результатов своих операндов

QueryResult

AndQuery::eval(const TextQuery& text) const {

// виртуальный вызов через операнды класса Query для получения

// результирующих наборов для операндов

auto left = lhs.eval(text), right = rhs.eval(text);

// набор для хранения пересечения left и right

auto ret_lines = make_shared>();

// выводит пересечение двух диапазонов в итератор назначения

// итератор назначения в этом вызове добавляет элементы в ret

set_intersection(left.begin(), left.end(),

right.begin(), right.end(),

inserter(*ret_lines, ret_lines->begin()));

return QueryResult(rep(), ret_lines, left.get_file());

}

Здесь для объединения двух наборов используется библиотечный алгоритм set_intersection, описанный в приложении А.2.8.

Алгоритм set_intersectionполучает пять итераторов. Первые четыре он использует для обозначения двух исходных последовательностей (см. раздел 10.5.2). Его последний аргумент обозначает получателя. Алгоритм выводит элементы, присутствующие в обеих исходных последовательностях, в результирующую.

В данном вызове получателем является итератор вставки (см. раздел 10.4.1). Результатом записи алгоритмом set_intersectionв этот итератор будет вставка нового элемента в набор ret_lines.

Подобно функции eval()класса OrQuery, эта завершается созданием и возвращением объекта класса QueryResult, представляющего объединение соответствий.

Функция NotQuery::eval()

Функция eval()класса NotQueryищет в тексте все строки, в которых операнд отсутствует.

// возвращает строки, отсутствующие в наборе результатов

// операнда QueryResult

NotQuery::eval(const TextQuery& text) const {

// виртуальный вызов для вычисления операнда Query

auto result = query.eval(text);

// начать с пустого результирующего набора данных

auto ret_lines = make_shared>();

// следует перебрать строки, в которых присутствует операнд

auto beg = result.begin(), end = result.end();

// для каждой строки во входном файле, если она отсутствует

// в result, добавить ее номер в ret_lines

auto sz = result.get_file()->size();

for (size_t n = 0; n != sz; ++n) {

// если не обработаны все строки в result

// проверить присутствие этой строки

if (beg == end || *beg != n)

ret_lines->insert(n); // если нет в result, добавить строку

else if (beg != end)

++beg; // в противном случае получить следующий номер строки

// в result, если она есть

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Язык программирования C++. Пятое издание»

Представляем Вашему вниманию похожие книги на «Язык программирования C++. Пятое издание» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Язык программирования C++. Пятое издание»

Обсуждение, отзывы о книге «Язык программирования C++. Пятое издание» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x