Стефан Дэвис - С++ для чайников .

Тут можно читать онлайн Стефан Дэвис - С++ для чайников . - бесплатно полную версию книги (целиком) без сокращений. Жанр: sci_tech, издательство Издательский дом Вильямс. Компьютерное издательство Диалектика, год 2007. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    С++ для чайников .
  • Автор:
  • Жанр:
  • Издательство:
    Издательский дом Вильямс. Компьютерное издательство Диалектика
  • Год:
    2007
  • Город:
    Москва
  • ISBN:
    0-7645-6852-3, 978-5-8459-0723-3
  • Рейтинг:
    4/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Стефан Дэвис - С++ для чайников . краткое содержание

С++ для чайников . - описание и краткое содержание, автор Стефан Дэвис, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
empty-line
1
empty-line
4

С++ для чайников . - читать онлайн бесплатно полную версию (весь текст целиком)

С++ для чайников . - читать книгу онлайн бесплатно, автор Стефан Дэвис
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

■■■

■ Класс может вернуть итератор, который указывает на первый член коллекции.

■ Итератор можно переместить от одного элемента к следующему.

■ Программа может обратиться к элементу, на который указывает итератор.

■■■

Код, требуемый для обхода списка list , отличается от кода обхода вектора vector . Однако итераторы скрывают эти детали, унифицируя обход любого контейнера с точки зрения программиста.

_________________

321 стр. Глава 28. Стандартная библиотека шаблонов

Приведённая далее программа использует итератор для обхода списка STL недеструктивным образом.

/* STLListUserClass — использование списка STL для */

/* хранения и сортировки объектов */

/* пользовательского класса */

#include

#include

#include

#include

#include

using namespace std ;

/* Student — пример пользовательского класса */

class Student

{

public :

Student( char* pszName , int id )

{

name = new string( pszName ) ;

ssID = id ;

}

string* name ;

int ssID ;

} ;

/* Данная функция требуется для поддержки сортировки */

bool operator<( Student & s1 , Student & s2 )

{

return s1.ssID < s2.ssID ;

}

/* Определение коллекции студентов */

list students ;

int main( int argc , char* pArgs[ ] )

{

setlocale ( LC_ALL , ".1251" ) ; /* печать кириллицы */

/* Добавление нескольких студентов в список */

students.push_back( *new Student( "Семенякин Сергей" , 10 ) ) ;

students.push_back( *new Student( "Редчук Александр", 5 ) ) ;

students.push_back( *new Student( "Шапран Павел" , 25 ) ) ;

students.push_back( *new Student( "Чистяков Александр" , 20 ) ) ;

students.push_back( *new Student( "Снежко Ирина" , 15 ) ) ;

/* Сортировка списка */

students.sort( ) ;

/* обход списка: */

/* 1 ) получаем итератор, который указывает на первый элемент списка */

list ::iterator iter = students.begin( ) ;

/* 2 ) цикл выполняется до тех пор, пока итератор не будет указывать на конец списка */

while ( iter != students.end( ) )

{

_________________

322 стр. Часть 5. Полезные особенности

/* 3 ) Получение студента, на которого указывает итератор */

Student & s = *iter ;

cout << s.ssID << " — " << *s.name << endl ;

/* 4 ) итератор переходит к следующему элементу списка */

iter++ ;

}

/* Пауза для того, чтобы посмотреть на результат работы программы */

system( "PAUSE" ) ; return 0 ;

}

Программа определяет список пользовательских объектов Student ( вместо простых имён ). Вызовы push_back( ) добавляют элементы в список ( "зашивание" этих вызовов в программу, а не, например, ввод с клавиатуры делает эту программу короче ). Вызов sort( ) сортирует список так же, как и в предыдущей программе.

Функцияsort в STL требует от пользователя переопределения оператора меньше - фото 340

«Функцияsort( ) в STL требует от пользователя переопределения оператора "меньше чем". ( Это одно из тех редких мест, где требуется определение пользовательского оператора, отличного от присвоения. ) Операторoperator<( Student & , Student & ) вызывается при вычислении выраженияs1 < s2 , гдеs1 иs2 — объекты типа Student.»

[ Атас! ]

Программа использует итератор iter для прохода по списку. Взгляните внимательно на объявление итератора: list ::iterator представляет собой итератор для контейнера list элементов типа Student . Строгая типизация ясно видна при выполнении присвоения ( шаг 3 в приведённом коде ): *iter возвращает ссылку на объект Student . Вывод данной программы выглядит следующим образом:

5 Редчук Александр 10 Семенякин Сергей 15 Снежко Ирина 20 - фото 341

5 — Редчук Александр

10 — Семенякин Сергей

15 — Снежко Ирина

20 — Чистяков Александр

25 — Шапран Павел

Press any key to continue...

Как сортирует функция sort( )

Я должен разъяснить один интересный момент — откуда метод sort( ) знает, какой из двух элементов списка "больше"? Другими словами, как определяется порядок сортировки? Для ряда типов С++ определяет порядок сортировки самостоятельно. Так, например, С++ не надо пояснять, какой из двух int больше. Кроме того, STL сортирует коллекцию строк по тем же правилам, что используются в словаре.

Таким образом, программе, сортирующей имена в списке, не надо было ничего пояснять, поскольку С++ известно, как сортировать объекты типа string . Однако С++ не знает, какой из объектов student больше. Для этой цели служит глобальная функция ::operator<( Student & , Student & ) . Метод sort( ) использует эту функцию для определения корректного порядка сортировки. В качестве эксперимента измените смысл оператора operator<( ) на обратный:

return s1.ssID > s2.ssID ;

При этом вы должны получить тот же список, что и ранее, но выведенный в обратном порядке:

25 Шапран Павел 20 Чистяков Александр 15 Снежко Ирина 10 - фото 342

25 — Шапран Павел

20 — Чистяков Александр

15 — Снежко Ирина

10 — Семенякин Сергей

5 — Редчук Александр

Press any key to continue...

_________________

323 стр. Глава 28. Стандартная библиотека шаблонов

►Использование контейнера map ...324

Ассоциативный массив map представляет собой ещё один класс-контейнер. Имеется множество ассоциативных массивов, но все они обладают одним общим свойством — обеспечивают быстрое сохранение и выборку в соответствии с некоторым ключом или индексом. Приведённая ниже программа демонстрирует этот принцип на практике.

Например, в институте студенты могут быть зарегистрированы при помощи уникальных идентификационных номеров. Этот идентификационный номер используется во всех случаях студенческой жизни: для получения информации о студенте, при выдаче книг в библиотеке, записи в ведомость об оценках. Очень важно, чтобы любая программа могла получить информацию о студенте по его номеру быстро и эффективно.

Следующая программа демонстрирует использование ассоциативного массива студентов с идентификатором в качестве ключа.

/* STLMap — использование ассоциативного массива */

/* для коллекции студентов, упорядоченной */

/* по их идентификаторам */

#include

#include

#include

#include

#include

#include

using namespace std ;

/* SC — Функция сравнения студентов, */

/* определяющая порядок их сортировки */

struct SC

{

bool operator( )( const int id1 , const int id2 ) const

{

return id1 < id2 ;

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

Интервал:

Закладка:

Сделать


Стефан Дэвис читать все книги автора по порядку

Стефан Дэвис - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




С++ для чайников . отзывы


Отзывы читателей о книге С++ для чайников ., автор: Стефан Дэвис. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x