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

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

С++ для чайников .: краткое содержание, описание и аннотация

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

empty-line
1
empty-line
4

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

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

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

Интервал:

Закладка:

Сделать

Однако список не в состоянии обеспечить произвольный доступ к своим элементам. Поскольку объекты могут быть связаны в произвольном порядке, не существует быстрого способа обратиться к n -ому элементу.

►Итераторы...321

В представленной в предыдущем разделе программе для прохода по списку использован деструктивный метод: метод pop_front( ) позволяет пользователю пройти по всему списку, удаляя всякий раз первый объект в списке.

Проход по массиву обычно осуществляется программистом с использованием индекса массива — но такой способ в случае списка неприменим. Можно представить решение, основанное на использовании методов типа getFirst( ) и getNext( ) , однако разработчики STL хотели обеспечить обобщённый метод прохода по элементам контейнера, который работал бы для любого вида контейнера. Этой цели служат итераторы STL.

Итератор представляет собой объект, который указывает на объекты, содержащиеся в контейнере. В общем случае итераторы поддерживают следующие функции.

■■■

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

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

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

■■■

Код, требуемый для обхода списка 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 . Вывод данной программы выглядит следующим образом:

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

Интервал:

Закладка:

Сделать

Похожие книги на «С++ для чайников .»

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


Отзывы о книге «С++ для чайников .»

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

x