Карта сайта 2
Автор admin Четверг, 8 апреля 2010 12:08
- +=, операторная функция, 103 o
- e(), функция, 365 remove_copy,
- 35 set_unexpected(), функция,
- inate(), функция, 34, 35, 47 T
- терн, 501 абстракция, 473 авто
- объект, 165 вставка строк, 98
- безопасность, 51 запуск, 28 об
- ная очередь, 382 список, 334,
- еняющий алгоритм, 284 неперехв
- ботка в С, 26 в С++, 26 п пара
- аттерн, 524 последовательность
- кий разбор, 347 синхронизация,
- Алфавитный указатель утечка п
- 1 э экземпляр активационной за
- : WWW.piter.COm4 ISBN 5-469-00
- и обращайтесь к специализирова
- титься об этом за счет тщатель
- ыли представлены в этой главе.
- используют общее пространство
- есколькими Упражнения 593 по
- более общей архитектуре ситуац
- ься при завершении задачи. Соз
- ngleton в библиотеке ZThreads.
- ичием активного ожидания. Один
- мере CarBuilder.cpp. 17. Переп
- римера с обедающими философами
- tomic operation Атомарная опе
- ynamic type Динамический тип
- одстановка Inner class Внутре
- метр Object-based hierarchy О
- ения Semaphore Семафор Sequen
- eak ordering Квазиупорядоченн
- bitset, контейнер, 416 bitset
- 7 erase(), функция, 110 еггпо,
- андартный контейнер, 414 hex,
- ют по порядку // и что все они
- и signal() теперь выполняются
- другое через контейнер CarQueu
- “TQueue.h” using namespace ZT
- endl: // Постановка рамы в оч
- whi1e(wheelBotHi red) workCon
- pted()) { // Блокировка до поя
- skFinished(): Кооперация между
- inishingQueue. cradle)); assem
- и приостанавливается вызовом w
- которая сигнализирует об усло
- до освобождения мутекса, один
- Это задача об обедающих филос
- nclude “zthread/Guard.h” #incl
- epTime()): // Философ голоден
- заметить, что если философы бу
- столкнетесь с взаимной блокир
- win. С другой стороны, в систе
- ненулевом значении ponderFacto
- емого первым процессом, то ест
- ничтожаются локальные объекты
- аммных потоках можно предотвра
- ред возведением каркаса здания
- , либо все задачи, приостановл
- роверкой условия внутри програ
- #i nclude <string> #include “
- dPtr<Car> car; public: WaxOff(
- Важно, чтобы это происходило
- будет находиться в приостанов
- й wait() до того момента, когд
- кировки (во время ожидания усл
- :ToastOMatiс.срр {RunByHand} /
- lock: Condition toastReady: C
- скрутка генератора случайных ч
- al() для активизации программн
- class TQueue { ZThread::Mutex
- есто того, чтобы порождать нов
- nter ruptO: } catch(Synchroniz
- ммными потоками 579 Toast О
- void run() { try { while(IThr
- оения нужного выходного сообще
- hreadedExecutor.h” |include “z
- count->isPaused()) { ++number:
- (*it)->getValue(): ++it: } ost
- аться к переменной count и мод
- кты Entrance переходят в состо
- количества посетителей. Если з
- торая не будет прерываться (ме
- осится на другой компьютер, и
- ные в смысле непрерывности, мо
- отовность к выполнению. Програ
- лучае он не будет выполняться
- ии ресурсов. По этой причине в
- ующий пример демонстрирует про
- дить во время операций ввода-в
- вода, поскольку означает, что
- interrupt() может произойти ра
- ак отмечалось ранее, исключени
- дача, сохраните результат, пол
- { cout « “Exiting via Interrup
- ed Ptr, который автоматически
- функции main() объекты Counte
- будем экспериментировать, соз
- Тестирование генератора произв
- м, задачи, совместно использую
- того он создает экземпляр гене
- igned int currentEvenValue;
- робуйте включить вызов yield()
- я бы в критические моменты). П
- ывает мутекс перед входом в кр
- чтобы повысить вероятность пе
- чений, программирование мутек-
- } ZThread #include <iostream>
- менное снятие блокировки // с
- n. Синхронизация целых классов
- функ- Причем весьма существенн
- ляется пять разных блоков памя
- v; public: Accessor(CountedPt
- но используется несколькими об
- ьтатам одного потока смешаться
- ндах } // Чтение ввода с консо
- endl: } ///:- Теперь главный
- связанные с межпроцессными вз
- cutor: for(int i = 0: i < 5: i
- использовать класс PoolExecut
- аким образом, хотя в книге мы
- xecute(new Liftoff(10. i)); }
- вам не придется заниматься си
- ода. Передача управления Если
- ndl: if(–countDown == 0) retu
- h” using namespace ZThread: us
- ие не работает, потому что иск
- токам с более высоким приорите
- Down; } void run() { while(tru
- оптимизацию. Без этих вычисле
- тве задачи и в любой момент вр
- деле рассматривается проблема
- ть, потребуется ли другому пот
- using namespace ZThread: using
- любом случае, если Count содер
- бъект фабрики способен создава
- ии в нем был реализован поиск
- e. Решите, какое оружие «выигр
- е. Программа пишется так, слов
- у. Чтобы не мешать работе оста
- основательно потрудиться. В эт
- словно вы периодически проверя
- точная программа на однопроцес
- мощности, прозрачному для про
- е обернулось еще хуже. Чтобы н
- стает работать в многопроцессо
- т вам лучше разобраться в ее в
- рирован таким образом, чтобы у
- ый сообщает компоновщику, где
- LIBRARY_PATH} Определение зада
- std::cout « id « ” completed”
- выполнение в нем функции run(
- ащает управление. Таким образо
- ization_Exception& e) { cerr «
- тходит от нормы: запуск потока
- otifier: friend class Flower::
- mingbird(string nm) : name(nm)
- й — открытие и закрытие цветка
- т получить большую часть досто
- а не наследования, и различия
- мической привязки. В основу ре
- dlib> #include “../purge.h” us
- sors : public Item { public: O
- m_iterator<Outcome>(cout. “\n”
- чную точки первого интервала (
- ограмму дополнения и изменения
- свободу действий и сокращает
- ункцию visit(). Итак, возникае
- irtual void visit(Chrysanthemu
- Flower* operatorOO { switch(r
- вать всю иерархию Visitor. Фун
- ования Вероятно, Посетитель бы
- хотите лишиться возможности до
- случае функция instanceO? 2.
- рывается для записи. Программа
- оторые он передает Строителю,
- eturn os « bp.names[bp.id]: }
- return “MountainBike”:} class
- hnician::construct() вызывает
- buildSprocket() { product->add
- E)); } void RacingBikeBui1der:
- ycle // Паттерн Строитель. #in
- // Вывод информации о велосип
- вление» архитектуры Smalltalk
- ass Observable: class Argument
- людаемыми объектами), и любую
- it)->update(this. arg): Отличи
- erase(), clear() и size() для
- ики программы. Но здесь возник
- о типа. Решение, позаимствован
- внутреннего класса: class Inne
- туальных деструкторов в обоих
- gable. Каждый внутренний класс
- ете добиться эффекта повышающе
- rvable { Flower* parent: bool
- лько в factory(), конструкторы
- м не менее, по БЧ главная цель
- hapeCreation(id): } }: // Опре
- ory:factories["Square"]= new S
- следствие своей закрытости фаб
- ляр фабрики сохранялся в отобр
- : C10:AbstractFactory.cpp // И
- gFuGuy: } virtual Obstacle* ma
- которой бы вам не приходилось
- объекту и дать ему возможность
- plien)1 решение этой задачи на
- ic: virtual void drawO { s->dr
- e) throw(Shape::BadShapeCreati
- скольку он единственный, что в
- о компилятор автоматически ген
- и выполнения, тогда как компил
- отать правильно. Чтобы разобра
- емую функцию (такую как draw()
- компилятор создает объекты об
- базового класса для «письма»
- классом, за которым скрывается
- только одну реализацию, тогда
- ntation->f(); } void g() { imp
- ставляет объект, находящийся в
- интерфейсного объекта, а, сле
- упрощает программу: //: C10:K
- жают их по-разному (то есть об
- объект FibonacciGenerator и со
- inO { return iterator(*this);
- ator() для FibonacciGenerator.
- ой функции) и не может изменят
- Тем не менее, механизм наслед
- endl; } }: class Admission :
- Процесс кончается тогда, когд
- ния паттерна способ построения
- include “../purge.h” using nam
- return NO; } -GimmeO { purge(c
- оздавались через единую Фабрик
- раздел с описанием Цепочки отв
- are::-Square” « endl; } }: Sha
- апроса, перебор элементов (как
- льны, и обычно они не имеют пр
- го). Но речь идет всего лишь о
- ругих местах также встречаются
- орая перелетает с цветка на цв
- ттерном в книге БЧ является Си
- арт С++ гласит: «Единица транс
- м примере функция instance() в
- откладывается до первого вызо
- ервого вызова logfile(). Допус
- котта Мейерса (Scott Meyers).
- зации, что уменьшает количеств
- вили класс MyClass производным
- В своей книге «Advanced С++:
- xecuteO { cout « “Hello “; } }
- атного вызова». Однако мы счит
- ность смягчает жесткую привязк
- s: TaskRunnerO {} // Синглетны
- perationО { if(button.isPresse
- ромежуток времени изменяется с
- а 9 • Множественное наследован
- Тор, и неоднозначность остала
- сылки на вложенный объект. Всю
- а, предоставляемый разработчик
- f // VEND0R_H 111 ~ Конечно, б
- никают проблемы. Во-первых, де
- ; Vendorl::v(); } void f() con
- ь при следующем повышающем пре
- иерархию классов, как Smalltal
- оанализируйте свою мотивацию.
- ывается. Решите проблему так,
- производные классы SuperHero н
- iveAmoeba для вызова любой из
- ользуйте реализацию Person::wo
- чи так, чтобы его можно было и
- ые трудности и выработала наиб
- или реализации (а нередко даж
- фактор перемен в вашей систем
- ции со всеми элементами интерв
- архитектура становится более
- ального деструктора Countable)
- 2_H ///:- Единственное изменен
- В { int z; }: int mainO { cout
- p == cp? ” « boolalpha « (bp =
- разовании bp в С*? Поскольку и
- который сначала проверяет, не
- ое выравнивание, поэтому разме
- няют, почему объект Bottom не
- public: BottomCint i. int j. i
- о Тор становится однозначным,
- осредственных базовых классов,
- ачность: кто именно должен отв
- нкции operator«(ostream&,const
- : Top(i). Left(0. j). Right(0.
- ,’« v; } public: Left(int m. i
- а Bottom. Последний должен зна
- происходит: //: C09:VirtInit.
- m G”), mC’in G”) { cout « “G “
- ализации виртуальных базовых к
- public: void f() {} }: class
- (*tp)].push_back(tp): } // Выв
- информации RTTI для типов ука
- dynamic_cast. Итоги Хотя в общ
- полнения с операторами typeid
- тов функцию clearSpitValve().
- ъекта и исполняла соответствую
- йте вектор случайных объектов
- так называемая объектно-базиро
- и. Поддержка множественного на
- олезным набором контейнеров. В
- в AT&T. 444 Глава 9 • Множес
- водного класса, но на самом пр
- ic Stringable { int myData; pu
- ава 9 • Множественное наследов
- и класса с правильной сигнатур
- ые подключаемые классы, то ест
- я, для нас они несущественны.
- def COUNTABLE_H #define COUNTA
- сутствие виртуального деструкт
- DBConnection: //: C09:UseDatab
- { typedef Security Super: pro
- nacast(Security* s) { return (
- мо, и функция возвращает соотв
- efine SECURITY.H #i nclude <io
- cout « “not a Investment” « e
- ратор dynamic_cast также может
- одном» (динамическом) типе, а
- к: struct PolyBase const * str
- ных классов вызов type_info::n
- Пример: //: С08:IntermediateCa
- вает интересное различие между
- Stimpy* s – dynamic_cast<St
- композиция, чтобы порядок выз
- ние типа // в старом стиле нев
- т использовать виртуальные фун
- езультате интерфейс становится
- { return val; } static void va
- e<class Container void sumValu
- n.push_back(ap); else if(pp) p
- ility> #i nclude <vector> #inc
- тейнеры вообще не используют и
- ри желании ею можно заменить р
- ; clock_t ticks = clockO; ford
- тает чуть быстрее оператора [
- ut « lbl « ": ": for(size_t i
- « endl: } III:- В классе valar
- array — выделение подмножеств
- 3); // Выделение подмножества
- лементы, соответствующие истин
- в: void matmult(const int a[][
- sum(). Размеры итогового объе
- к и список. Отсортируйте их. Н
- ерации получает два последние
- ите генератор, создающий объек
- Если пользователь сможет угада
- храниться в объекте valarray<
- тного и эффективного кода. За
- мический тип объекта в том слу
- вания типов на стадии выполнен
- х. При этом животные одного ви
- Sighting. // содержимое котор
- taPoint> DataMap: typedef Data
- втоматически используется конс
- ое (существование оператора «
- ких абсолютно одинаковых объек
- ator> #i nclude <set> using na
- X>(cout. ” “)): cout « “\n—-
- одинаковыми ключами. Рассмотри
- создаем итератор и инициализи
- чем множество. В реализации м
- <string. vector<string> > TEnt
- // Выход if (thesaurus. find(
- ельные записи тезауруса (а так
- вателю выбрать искомое «слово»
- не приходилось каждый раз про
- и интервалами, в том числе с м
- принадлежностью объектов. Есл
- в 413 public: // Объявление к
- .beginO): } int sizeO { return
- т находиться только в двух сос
- vb.push_back(false): ostream_i
- ом STL — она не дает некоторых
- ображение, содержащее только к
- я элемента: cout « “ns.count(n
- ъект, обеспечивающий альтернат
- ование интервалов одинаковых к
- д значений контейнера с помощь
- ращает новую пару из итератора
- (то есть один элемент отображе
- ару, в которой переменная firs
- твии ключа, или функцией find(
- онтейнеров. Впрочем, дублируют
- ого. Например, наша задача мож
- }: // Генератор для создания
- urus.срр позднее в этой главе)
- разными типами контейнеров, и
- люча (по которому осуществляет
- им следующую реализацию програ
- м сору(), придется написать оп
- изации priority_queue использу
- pqi: srand(time(0)): for(int
- . ‘C. 3)); toDoList.push(ToDoI
- queue хранится в защищенной пе
- // Построение собственной при
- еборе элементов кучи вы не пол
- конец // Внести изменения в к
- пришлось использовать вроде б
- ие на стадии определения шабло
- в главе 5, подойдет любое доп
- ‘: pqi .popO; } } ///:- Шаблон
- return г: } }: int mainO { PQV
- использовать запись вида ObOlO
- естен на стадии компиляции, бл
- разрядных операций в наиболее
- и // нового значения: г |= bit
- endl: cout « (BS(a) A= b) « “
- c.noneO ? “true” : “false”) «
- льшинстве реализаций. Если пол
- тавление из 0 и 1. Также возмо
- s) const { return word; } std:
- уктору наряду с предикатом дол
- , удовлетворяющие предикату вх
- “Tokenlterator.h” 374 Глава
- okenIterator<deque<char>:itera
- тор vector<string> (также можн
- наряду с queue и priority_queu
- de <stack> linclude <string> l
- , такое решение безопасно по о
- дую строку файла вместе с инфо
- Line. list<Line> > stk(lines);
- include <string> #i nclude <ve
- но как очередь. Класс queue, к
- ляют имитировать многопоточнос
- сира присутствует функция run(
- nt = rv.current: ttime = rv.tt
- Продолжать обслуживание текуще
- о клиентов будет поступать в к
- нной переменной класса. В соот
- Попробуйте поэкспериментироват
- доступе В векторах и деках опр
- j = 0: j < sz; j++) di.at(j);
- ким местом» программы. Основны
- st<Noisy> 1: ostream_iterator<
- ев. 364 Глава 7 • Обобщенные
- erator> #i nclude <list> #incl
- четырех списков объектами Nois
- / Тестирование функции uniqueO
- о необходимо отсортировать эле
- ol operator<(const Obj& a. con
- ейнера #ifndef PRINT_C0NTAINER
- cl. c2; generate_n(back_insert
- элемент хранится только в одно
- ывод списка слов, встречающихс
- ции использует операторную фун
- оторых функция isalpha() станд
- мысль, что вместо char можно
- ло воспользоваться итератором
- , но и является хорошим пример
- ::isalpha(c); } }: class Delim
- ор Шаблон класса vector напоми
- ыделяет блок памяти, как бы пр
- может упоминавшийся ранее клас
- oisyReport { static NoisyRepor
- д его заменой на id присваивае
- нструирования копий и уничтоже
- ущее содержимое. Но для этого
- ения объектов при перераспреде
- //: С07:VectorCoreDump.cpp //
- выборку элементов оператором [
- ия. 1. Программист заранее выд
- dl; copy(v.beginO. v.endO, out
- т последовательность элементов
- в контейнере. Многие из привед
- // Загрузка данных в вектор: c
- dstrings.end(). ostream_itera
- мальным выбором контейнера. •
- , элементы которого образуют н
- ть для vl выделяется только од
- ески не выводятся. Поскольку п
- чения итератора re ve rse_i te
- обычных итераторов. Категории
- Они также могут разыменовыват
- ц, итераторы произвольного дос
- в предыдущей главе). Каждый а
- output_iterator_tag, потому ч
- онтейнера (вместо замены объек
- sert(). При вызове этой функци
- +it: ++it: ++it: copy(a. a + s
- сегда можно вывести новые элем
- tor<string>, разыменованному и
- clude <fstream> linclude <iost
- stream::operator». Если вы сам
- ивании и уничтожении (определе
- мяти с использованием копирующ
- поведения основных разновиднос
- }; const int iasz = sizeof(ia
- inO. c3.end())"): it = c.begin
- тов и исходное значение, а вто
- ольного доступа, итераторы мож
- а полной информацией следует о
- . В нашем примере значения 0-9
- жеств слова автоматически сорт
- исваивания. Контейнеры различа
- программирование с применением
- акой подход позволяет заменять
- (new Triangle); fordter i = sh
- ные контейнеры 1 Стоит напомни
- ным указателем Shape*. Происхо
- значит, следующая строка вызы
- раммой. Например, чтобы перейт
- поэтому для них оператор dele
- жаться все хранящиеся в нем об
- оздает вектор vector<string> с
- лежит именно ему. Во-вторых, в
- обходимым. //: C07:FileEditor.
- ringVector.cpp просто упакован
- цией файла в памяти. Классифик
- = и !=. Следовательно, перемещ
- blic: Z(int ii) : i(ii) {} voi
- нформация о контейнерах и вста
- нных обобщенных алгоритмов. Ес
- глядит вполне разумно, но... Е
- о их использовать (или хотя бы
- лиотека программиста», вышедшу
- елите эту функцию в D так, что
- слова, присутствующие только в
- см. файл <cmath>). 16. Оцените
- именяющей их к объектам первог
- ыло одинаковых кодов или слов.
- dO % 10 + 10: } 24. Определите
- чайным образом генерировать по
- . Реализуйте необходимые опера
- ham 349 2930 Jane Doe 283 2819
- ратным использованием программ
- и С++ предоставляют широкий ас
- ыки поставляются со своей библ
- элементов контейнера? Гибкий д
- ляют разные интерфейсы и облад
- ако вставка элемента в середин
- рестает быть кучей. Это означа
- ервала. Окончательным возвраща
- ый итератор полученного интерв
- ted(char* id) : ident(id) { co
- Шаблонная функция: template <
- и оператор присваивания отсутс
- последовательность вызовов фун
- й оператор присваивания // и к
- #i nclude <vector> #include "I
- одится на печать. Многие опера
- vector<Inventory> vi: srand(t
- count))): } }: struct DiscGen
- <numeric>, поскольку они испо
- элементы второго интервала и
- utputlterator result. BinaryFu
- ): Алгоритм вычисляет разность
- к заменить их собственными опе
- же результатом: it = adjacent
- , в контейнерах или при переда
- 23 Перемещает итератор i впере
- алгоритмов unique мы сортируем
- ияния с другим отсортированным
- в при помощи оператора <, а вт
- ssIterator result_first. Rando
- ов элементы не располагаются в
- last). Forwardlterator lower_b
- и возвращает объект pair с ит
- gorithm> #include <cassert> #i
- al_sort(v.begin(). it. v.endO)
- я ранее класс NString. Этот кл
- upper_bound() — итератор для п
- нения операции сохраняется отн
- ted, а + SZ. SkipGenCO. 2)): a
- о выполнять математические опе
- одных интервалов не обязан сод
- irstl. Inputlteratorl lastl. I
- ты интервала 2, отсутствующие
- ): print(v. v + SZ. "v". ""):
- с возможностью выборки элемен
- авильную позицию кучи. Каталог
- icate pred, const T& new value
- .2. 3. 4. 5. 6. 6. 7. 7. 7. 8.
- zeof с / sizeof *c; printCc. с
- ne возвращает true, если второ
- ько смежных пар одинаковых объ
- ритму find_first_of() передает
- стандартным путем и воспользов
- рвалов На первый взгляд может
- ol lexicographical_compare(Inp
- тся «предшествующим» существую
- хся элементов первого и второг
- g> #i nclude <vector> #include
- esult « endl; if(result == tru
- твует ли s2 строке si, мы полу
- ию удаления. Поскольку элемент
- й конечный итератор. С другой
- рвал [first,last), находят эле
- (Inputlterator first. Inputlte
- /{L} Generators #include <algo
- - v.beginO): unique_copy(v.be
- а счетчиков вхождений: friend
- зываемую из шаблона greater. З
- того, пример демонстрирует пр
- ачальный размер не задан, поэт
- тся в следующей главе. Каталог
- ted". ""): } ///:- Работа алго
- last. BidirectionalIterator2 d
- rl lastl. ForwardIterator2 fir
- or first. Bidirectional Iterat
- void random_shuffle(RandomAcc
- «точкой разбиения». Для алгор
- swap_ranges(vl.beginO, vl.beg
- sasz = sizeof sa / sizeof *sa
- горитм reverse() выполняет пер
- горитмами STL. Также можно был
- возвращается итератор last. Ал
- которых бинарный предикат bina
- yPredicate binary_pred): Алгор
- ze count, const T& value): For
- st,r). Forwardlterator max_ele
- rge(vs); } ///:- Алгоритм for_
- едаваемый аргумент берется из
- ый для каждого элемента в перв
- ing namespace std: typedef vec
- птер mem_fun_ref() с функцией
- <string> vs(SZ); // Заполнение
- > #include <string> using name
- щие в композицию, являются ада
- йными строками: generateC vs.
- х, а смысл аргументов шаблона
- рии итераторов. Например, в ре
- ли вывода на один и тот же инт
- Inputlterator и Outputlterato
- При описании групп элементов,
- лать: найти элемент или набор
- !- 0 && *nm != ‘\0′) os « nm
- еспечить поддержку необходимых
- тому в итоге может быть получе
- // данного слова fifndef NSTRI
- еделен стандартный объект бина
- й аргумент equal_to равен 20,
- гическая функция !(бинарный_пр
- { typedef typename Op::first_a
- пов аргументов. Допустим, вы х
- тор, пропускающий числа: class
- нем используется контейнер se
- B(EXPR) EXPR; print(br.begin()
- x. y, br, greater<int>0)): Объ
- именяется к исходному вектору
- полняется в половине случаев.
- элементы двух векторов сравни
- estBinary(x. y. br. not_equal_
- ожить каждый элемент вектора н
- ude <algorithm> linclude <func
- затель на обычную функцию, так
- нкцией #include <algorithm> #i
Последние комментарии