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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

Независимо от того, был ли создан новый набор, происходит вызов функции insert(), добавляющей текущий номер строки. Поскольку lines— это ссылка, вызов функции insert()добавляет элемент в набор карты wm. Если данное слово встречается несколько раз в той же строке, вызов функции insert()не делает ничего.

Класс QueryResult

Класс QueryResultобладает тремя переменными-членами: строка, представляющая слово, указатель shared_ptrна вектор, содержащий входной файл; и указатель shared_ptrна набор номеров строк, в которых присутствует это слово. Его единственная функция-член — конструктор, инициализирующий эти три члена:

class QueryResult {

friend std::ostream& print(std::ostream&, const QueryResult&);

public:

QueryResult(std::string s,

std::shared_ptr> p,

std::shared_ptr> f):

sought(s), lines(p), file(f) { }

private:

std::string sought; // слово, представляющее запрос

std::shared_ptr> lines; // номера строк

std::shared_ptr> file; // входной файл

};

Единственная задача конструктора — сохранить свои аргументы в соответствующих переменных-членах, что он и делает в списке инициализации конструктора (см. раздел 7.1.4).

Функция query()

Функция query()получает строку, которую она использует для поиска соответствующего набора номеров строк в карте. Если строка найдена, функция query()создает объект класса QueryResultиз заданной строки, переменной-члена fileкласса TextQueryи набора, извлеченного из карты wm.

Единственный вопрос: что следует возвратить, если заданная строка не найдена? В данном случае никакого набора возвращено не будет. Решим эту проблему, определив локальный статический объект, являющийся указателем shared_ptrна пустой набор номеров строк. Когда слово не найдено, возвратим копию этого указателя shared_ptr:

QueryResult

TextQuery::query(const string &sought) const {

// возвратить указатель на этот набор, если искомое слово не найдено

static shared_ptr> nodata(new set);

// использовать find() но не индексировать, чтобы избежать

// добавления слова в карту wm!

auto loc = wm.find(sought);

if (loc == wm.end())

return QueryResult(sought, nodata, file); // не найдено

else

return QueryResult(sought, loc->second, file);

}

Вывод результатов

Функция print()выводит заданный объект класса QueryResultв заданный поток:

ostream &print(ostream &os, const QueryResult &qr) {

// если слово найдено, вывести количество и все вхождения

os << qr.sought << " occurs " << qr.lines->size() << " "

<< make_plural(qr.lines->size(), "time", "s") << endl;

// вывести каждую строку, в которой присутствует слово

for (auto num : *qr.lines) // для каждого элемента в наборе

// не путать пользователя с номерами строк, начинающимися с 0

os << "\t (line " << num + 1 << ") "

<< *(qr.file->begin() + num) << endl;

return os;

}

Для отчета о количестве найденных соответствий используем функцию size()набора, на который ссылается qr.lines. Поскольку этот набор контролируется указателем shared_ptr, следует помнить об обращении к значению lines. Чтобы вывести слово timeили times, в зависимости от того, равен ли размер 1, используем функцию make_plural()(см. раздел 6.3.2).

Цикл forперебирает набор, на который ссылается lines. Тело цикла forвыводит номер строки, откорректированный так, как привычно человеку. Числа в наборе являются индексами элементов в векторе, их нумерация начинается с нуля. Но большинство пользователей привыкли к тому, что первая строка имеет номер 1, поэтому будем систематически добавлять 1 к номерам строк, чтобы отображать их в общепринятой форме.

Используем номер строки для выбора строк из вектора, на который указывает указатель-член file. Помните, что при добавлении числа к итератору будет получен элемент на столько же элементов далее (см. раздел 3.4.2). Таким образом, часть file->begin() + numдает номер элемента от начала вектора, на который указывает file.

Обратите внимание: эта функция правильно обрабатывает случай, когда слово не найдено. В данном случае набор будет пуст. Первый оператор вывода заметит, что слово встретилось нуль раз. Поскольку *res.linesпуст, цикл forне выполнится ни разу.

Упражнения раздела 12.3.2

Упражнение 12.30. Определите собственные версии классов TextQueryи QueryResult, а также выполните функцию runQueries()из раздела 12.3.1.

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

Интервал:

Закладка:

Сделать

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

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


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

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