Использование функций fopen(), fgetc(), fputc() и fclose()



 

Функции fopen() , fgetc() , fputc() и fclose() составляют минимальный набор операций с файлами. Их использование демонстрируется в следующей программе, которая выполняет копирование файла. Обратите внимание на то, что файлы открываются в двоичном режиме и что для проверки достижения конца файла используется функция feof() .

 

Функции ferror() и rewind()

 

Функция ferror() используется для определения факта возникновения ошибки при выполнении операции с файлом. Ее прототип имеет такой вид.

 

 

Здесь параметр fp – действительный файловый указатель. Функция ferror() возвращает значение true , если при выполнении последней файловой операции произошла ошибка; в противном случае – значение false . Поскольку возникновение ошибки возможно при выполнении любой операции с файлом, функцию ferror() необходимо вызывать сразу после каждой функции обработки файлов; в противном случае информацию об ошибке можно попросту потерять.

Функция rewind( ) перемещает индикатор позиции файла в начало файла, заданного в качестве аргумента. Ее прототип выглядит так.

 

 

Здесь параметр fp – действительный файловый указатель.

 

Функции fread() и fwrite()

 

В файловой системе языка С предусмотрено две функции, fread() и fwrite() , которые позволяют считывать и записывать блоки данных. Эти функции подобны С++‑функциям read() и write() . Их прототипы имеют следующий вид.

 

 

При вызове функции fread() параметр buffer представляет собой указатель на область памяти, которая предназначена для приема данных, считываемых из файла. Функция считывает count объектов длиной num_bytes из потока, адресуемого файловым указателем fp . Функция fread() возвращает количество считанных объектов, которое может оказаться меньше заданного значения count , если при выполнении этой операции возникла ошибка или был достигнут конец файла.

При вызове функции fwrite() параметр buffer представляет собой указатель на информацию, которая подлежит записи в файл. Эта функция записывает count объектов длиной num_bytes в поток, адресуемый файловым указателем fp . Функция fwrite() возвращает количество записанных объектов, которое будет равно значению count , если при выполнении этой операции не было ошибки.

Если при вызове функций fread() и fwrite() файл был открыт для выполнения двоичной операции, то они могут считывать или записывать данные любого типа. Например, следующая программа записывает в дисковый файл значение типа float .

 

 

Как показано в этой программе, роль буфера может выполнять (и при том довольно часто) одна переменная.

С помощью функций fread() и fwrite() часто выполняется считывание и запись содержимого массивов или структур. Например, следующая программа, используя одну только функцию fwrite() , записывает содержимое массива значений с плавающей точкой balance в файл с именем balance . Затем с помощью одной лишь функции fread() программа считывает элементы этого массива и отображает их на экране.

 

 

Использовать функции fread() и fwrite() для считывания и записи блоков данных более эффективно, чем многократно вызывать функции fgetc() и fputc() .

 

Функция fseek() и выполнение ввода‑вывода с произвольным доступом

 

С‑система ввода‑вывода позволяет выполнять операции считывания и записи данных с произвольным доступом. Для этого служит функция fseek() , которая устанавливает нужным образом индикатор позиции файла. Ее прототип таков.

 

 

Здесь параметр fp – файловый указатель, возвращаемый функцией fopen() , параметр numbytes – количество байтов относительно исходного положения, заданного параметром origin . Параметр origin может принимать одно из следующих макроимен (определенных в заголовке stdio.h ).

 

 

Следовательно, чтобы переместить индикатор позиции в файле на numbytes байтов относительно его начала, в качестве параметра origin необходимо использовать значение SEEK_SET . Для перемещения относительно текущей позиции используйте значение SEEK_CUR , а для смещения с конца файла – значение SEEK_END .

Нулевое значение результата функции свидетельствует об успешном выполнении функции fseek() , а ненулевое– о возникновении сбоя. Как правило, функцию fseek() не рекомендуется использовать для файлов, открытых в текстовом режиме, поскольку преобразование символов может привести к ошибочным перемещениям индикатора позиции в файле. Поэтому лучше использовать эту функцию для файлов, открытых в двоичном режиме. Например, если вам нужно считать 234‑й байт в файле test , выполните следующий код.

 

Функции fprintf() и fscanf()

 

Помимо рассмотренных выше основных функций ввода‑вывода, С‑система ввода‑вывода включает функции fprintf() и fscanf() . Поведение этих функций аналогично поведению функций printf() и scanf() , за исключением того, что они работают с файлами. Именно поэтому эти функции обычно используются в С‑программах. Прототипы функций fprintf() и fscanf() выглядят так.

 

 

Здесь параметр fp – файловый указатель, возвращаемый функцией fopen() . Функции fprintf() и fscanf() работают подобно функциям printf() и scanf() соответственно, за исключением того, что их действие направлено на файл, определенный параметром fp .

 

Удаление файлов

 

Функция remove() удаляет заданный файл. Ее прототип выглядит так.

 

 

Она возвращает нуль при успешном удалении файла и ненулевое значение в противном случае.

 

Приложение Б: Использование устаревшего С++‑компилятора

 

Программы, приведенные в этой книге, полностью соответствуют стандарту ANSI/ISO для C++ и могут быть скомпилированы практически любым современным С++‑компилятором, включая Visual C++ (Microsoft) и C++ Builder (Borland). Следовательно, при использовании современного компилятора у вас не должно быть проблем с компиляцией программ из этой книги. (В этом случае вам вообще не понадобится информация, представленная в этом приложении.)

Но если вы используете компилятор, созданный несколько лет назад, то при попытке скомпилировать наши примеры он может выдать целый список ошибок, не распознав ряд новых С++‑средств. И в этом случае не стоит волноваться. Для того чтобы эти программы заработали со старыми компиляторами, нужно внести в них небольшие изменения. Чаще всего старые и новые С++‑программы отличаются использованием двух средств: заголовков и пространств имен. Вот об этом и пойдет речь в этом приложении.

Как упоминалось в главе 2, инструкция #include включает в программу заданный заголовок. Для более ранних версий C++ под заголовками понимались файлы с расширением .h . Например, в старой С++‑программе для включения заголовка iostream была бы использована следующая инструкция.

 

 

В этом случае в программу был бы включен заголовочный файл iostream.h . Таким образом, включая в старую С++‑программу заголовок, необходимо задавать имя файла с расширением .h .

В новых С++‑программах в соответствии со стандартом ANSI/ISO для C++ используются заголовки другого типа. Современные заголовки определяют не имена файлов, а стандартные идентификаторы, которые могут совпадать с таковыми, но не всегда. Современные С++‑заголовки представляют собой абстракцию, которая попросту гарантирует включение в программу требуемой информации.

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

 

 

Чтобы преобразовать эти "новые" заголовки в "старые" заголовочные файлы, достаточно добавить расширение .h .

Включая современный заголовок в программу, необходимо помнить, что его содержимое относится к пространству имен std . Как упоминалось выше, пространство имен – это просто декларативная область. Ее назначение – локализовать имена идентификаторов во избежание коллизий с именами. Старые версии C++ помещают имена библиотечных функций в глобальное пространство имен, а не в пространство имен std , используемое современными компиляторами. Таким образом, работая со старым компилятором, не нужно использовать эту инструкцию:

 

 

В действительности большинство старых компиляторов вообще не воспримут инструкцию using namespace .

 

Два простых изменения

 

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

 

 

такой.

 

 

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

Иногда приходится вносить и другие изменения. C++ наследует ряд заголовков из языка С. Язык С не поддерживает современный стиль использования С++‑заголовков, используя вместо них заголовочные .h ‑файлы. Для разрешения обратной совместимости стандарт C++ по‑прежнему поддерживает заголовочные С‑файлы. Однако стандарт C++ также определяет современные заголовки, которые можно использовать вместо заголовочных С‑файлов. В С++‑версиях стандартных С‑заголовков к имени С‑файла просто добавляется префикс 'c' и опускается расширение .h . Например, С++‑заголовком для файла math.h служит заголовок <cmath> , а для файла string.h – заголовок <cstring> . Несмотря на то что в С++‑программу разрешено включать заголовочный С‑файл, против такого подхода у разработчиков стандарта есть существенные возражения (другими словами, это не рекомендовано). Поэтому в настоящей книге используются современные С++‑заголовки во всех инструкциях #include. Если ваш компилятор не поддерживает С++‑заголовки для С‑заголовков, просто замените "старые" заголовочные файлы.

 

Приложение В: *.NET‑расширения для C++

 

Разработанная компанией Microsoft интегрированная оболочка .NET Framework определяет среду, которая предназначена для поддержки разработки и выполнения сильно распределенных приложений, основанных на использовании компонентных объектов. Она позволяет "мирно сосуществовать" различным языкам программирования и обеспечивает безопасность, переносимость программ и общую модель программирования для платформы Windows. Несмотря на относительную новизну оболочки .NET Framework, по всей вероятности, в ближайшем будущем в этой среде будут работать многие С++‑программисты.

Интегрированная оболочка .NET Framework предоставляет управляемую среду, которая следит за выполнением программы. Программа, предназначенная для помещения в оболочку .NET Framework , не компилируется с целью получения объектного кода. Вместо этого она переводится на промежуточный язык MSIL (Microsoft Intermediate Language), а затем выполняется под управлением универсального средства CLR (Common Language Runtime). Управляемое выполнение– это механизм, который поддерживает ключевые преимущества, предлагаемые оболочкой .NET Framework .

Чтобы воспользоваться преимуществами управляемого выполнения, необходимо применять для С++‑программ специальный набор нестандартных ключевых слов и директив препроцессора, которые были определены разработчиками компании Microsoft. Важно понимать, что этот дополнительный набор не включен в стандарт C++ (ANSI/ISO Standard C++). Поэтому код, в котором используются эти ключевые слова, нельзя переносить в другие среды выполнения.

Описание оболочки .NET Framework и методов С++‑программирования, необходимых для ее использования, выходит за рамки этой книги. Однако здесь приводится краткий обзор .NET ‑расширения языка C++ ради тех программистов, которые работают в .NET ‑среде.

 

Ключевые слова .NET‑среды

 

Для поддержки .NET ‑среды управляемого выполнения С++‑программ Microsoft вводит в язык C++ следующие ключевые слова.

 

 

Краткое описание каждого из этих ключевых слов приведено в следующих разделах.

 

_ _abstract

 

Ключевое слово _ _abstract используется в сочетании со словом _ _gc при определении абстрактного управляемого класса. Объект _ _abstract ‑класса создать нельзя. Для класса, определенного с использованием ключевого слова _ _abstract , необязательно включение в него чисто виртуальной функции.

 

_ _box

 

Ключевое слов _ _box заключает в специальную оболочку значение внутри объекта. Такая "упаковка" позволяет использовать тип этого значения в коде, который требует, чтобы данный объект был выведен из класса System::Object , базового класса для всех .NET ‑объектов.

 

_ _delegate

 

Ключевое слово _ _delegate определяет объект‑делегат, который инкапсулирует указатель на функцию внутри управляемого класса (т.е. класса, модифицированного ключевым словом _ _gc ).

 

_ _event

 

Ключевое слово _ _event определяет функцию, которая представляет некоторое событие. Для такой функции задается только прототип.

 

_ _finally

 

Ключевое слово _ _finally – это дополнение к стандартному С++‑механизму обработки исключительных ситуаций. Оно используется для определения блока кода, который должен выполняться после выхода из блоков try/catch . При этом не имеет значения, какие условия приводят к завершению try/catch ‑блока. Блок _ _finally должен быть выполнен в любом случае.

 

_ _gc

 

Ключевое слово _ _gc определяет управляемый класс. Обозначение "gc" представляет собой сокращение от словосочетания "garbage collection" (т.е. "сборка мусора") и означает, что объекты этого класса автоматически подвергаются процессу утилизации памяти, освобождаемой во время работы программы, когда они больше не нужны. В объекте отпадает необходимость в случае, когда на него не существует ни одной ссылки. Объекты _ _gc ‑класса должны создаваться с помощью оператора new . Массивы, указатели и интерфейсы также можно определять с использованием ключевого слова _ _gc .

 

_ _identifier

 

Ключевое слово _ _identifier позволяет любому другому ключевому слову языка C++ использоваться в качестве идентификатора. Эта возможность не предназначена для широкого применения и введена для решения специальных задач.

 

_ _interface

 

Ключевое слово _ _interface определяет класс, который должен действовать как интерфейс. В любом интерфейсе ни одна из функций не должна включать тело, т.е. все функции интерфейса являются неявно заданными чисто виртуальными функциями. Таким образом, интерфейс представляет собой абстрактный класс, в котором не реализована ни одна из его функций.

 

_ _nogc

 

Ключевое слово _ _nogc определяет неуправляемый класс. Поскольку такой (неуправляемый) тип класса создается по умолчанию, ключевое слово _ _nogc используется редко.

 

_ _pin

 

Ключевое слово _ _pin используется для определения указателя, который фиксирует местоположение в памяти объекта, на который он указывает. Таким образом, "закрепленный" объект не будет перемещаться в памяти в процессе сборки мусора. Как следствие, сборщик мусора не в состоянии сделать недействительным указатель, модифицированный с помощью ключевого слова _ _pin .

 

_ _property

 

Ключевое слово _ _property определяет свойство, являющееся функцией‑членом, которая позволяет установить или получить значение некоторой переменной (члена данных класса). Свойства предоставляют удобное средство управления доступом к закрытым (private) или защищенным (protected) данным.

 

_ _sealed

 

Ключевое слово _ _sealed предохраняет модифицируемый им класс от наследования другими классами. Это ключевое слово можно также использовать для информирования о том, что виртуальная функция не может быть переопределена.

 

_ _try_cast

 

С помощью ключевого слова _ _try_cast можно попытаться преобразовать тип выражения. Если предпринятая попытка окажется неудачной, будет сгенерировано исключение типа System::InvalidCastException .

 

_ _typeof

 

Ключевое слово _ _typeof позволяет получить объект, который инкапсулирует информацию о данном типе. Этот объект представляет собой экземпляр класса System::Туре .

 

_ _value

 

Ключевое слово _ _value определяет класс, который представляет собой обозначение типа. Любое обозначение типа содержит собственные значения. И этим тип _ _value отличается от типа _ _gc , который должен выделять память для объекта с помощью оператора new . Обозначения типа, не представляют интерес для "сборщика мусора".

 

Расширения препроцессора

 

Для поддержки .NET ‑среды компания Microsoft определяет директиву препроцессора #using , которая используется для импортирования метаданных в программу. Метаданные содержат информацию о типе и членах класса в форме, которая не зависит от конкретного языка программирования. Таким образом, метаданные обеспечивают поддержку смешанного использования языков программирования. Все управляемые С++‑программы должны импортировать библиотеку <mscorlib.dll> , которая содержит необходимые метаданные для оболочки .NET Framework .

Компания Microsoft определяет две pragma ‑инструкции (используемые с директивой препроцессора #pragma), которые имеют отношение к оболочке .NET Framework . Первая (managed ) определяет управляемый код. Вторая (unmanaged ) определяет неуправляемый (собственный, т.е. присущий данной среде) код. Эти инструкции могут быть использованы внутри программы для селективного создания управляемого и неуправляемого кода.

 

Атрибут attribute

 

Компания Microsoft определяет атрибут attribute , который используется для объявления другого атрибута.

 

Компиляция управляемых С++‑программ

 

На момент написания этой книги единственный доступный компилятор, который мог обрабатывать программы, ориентированные на работу в среде .NET Framework , поставлялся компанией Microsoft (Visual Studio .NET). Чтобы скомпилировать управляемую программу, необходимо использовать команду /сlr , которая передаст вашу программу "в руки" универсального средства Common Language Runtime .

 

Предметный указатель

 

‑Символы‑

 

#define, директива, 570

#elif, директива, 576

#endif, директива, 575

#error, директива, 574

#if, директива, 575

#ifdef, директива, 577

#ifndef, директива, 577

#include, директива, 574; 602

#pragma, директива, 580

#undef, директива, 578

#using, 609

.NET Framework, 606

_ _abstract, 606

_ _box, 607

_ _cplusplus, макрос, 582

_ _DATE_ _, макрос, 582

_ _delegate, 607

_ _event, 607

_ _FILE_ _, макрос, 580; 582

_ _finally, 607

_ _gc, 607

_ _identifier, 607

_ _interface, 608

_ _LINE_ _, макрос, 580; 582

_ _nogc, 608

_ _pin, 608

_ _property, 608

_ _sealed, 608

_ _STDC_ _, макрос, 582

_ _TIME_ _, макрос, 582

_ _try_cast, 608

_ _typeof, 609

_ _value, 609

 

 

‑A‑

 

abort(), 417,419

abs(), 167; 191

Allocator, 524

American National Standards Institute, 18

ANSI, 18

asm, 514

assign(), 563

atof(), 164

attribute, 609

auto, спецификатор, 149; 206

 

 

‑B‑

 

bad(), 471

bad_cast, исключение, 484

BASIC, 24

basic ios, класс, 440

basic_iostream, класс, 440

basic_istream, класс, 440

basic ostream, класс, 440

basic_streambuf, класс, 440

BCPL, 23

before(), 475

begin(), 529

Binding

early, 393

late, 393

bool, 56

boolalpha, флаг, 448

break, 95

 

 

‑C‑

 

C#, 29

C++ Builder, 27; 33

C89, 23

C99, 23

Call‑by‑reference, 178

Call‑by‑value, 178

Cast, 75

catch, 416

cerr, 440

char, 56; 61

cin, 440

class, 266

clear(), 471

clock(), 213

clog, 440

close(), 458

CLR, 606

Common Language Runtime, 606; 609

compare(), 566

const, спецификатор типа, 202; 508

const_cast, оператор, 488

continue, 94

count(), алгоритм, 554

count_if(), алгоритм, 554

cout, 440

 

 

‑D‑

 

Daylight Saving Time, 251

dec, флаг, 448

delete, 230

double, 40; 56

do‑while, 93

dynamic_cast, оператор, 483

 

 

‑E‑

 

Early binding, 393

end(), 529

enum, 214

eof(), 463

erase(), 529

exit(), 418; 419

EXIT_FAILURE, константа, 419

EXIT_SUCCESS, константа, 419

explicit, 510

extern, 206; 516

 

 

‑F‑

 

fabs(), 191

fail(), 471

false, константа, 57

fclose(), 595

feof(), 595

ferror(), 597

fgetc(), 595

fill(), 451

find(), 565

fixed, флаг, 448

flags(), 449

Flat model, 141

float, 56

flush(), 467

fmtflags, перечисление, 447

fopen(), 593

for, цикл, 49; 82

FORTRAN, 24

fprintf(), 600

fputc(), 594

fread(), 597

free(), 233

friend, 294

fscanf(), 600

fseek(), 599

Function overloading, 190

fwrite(), 597

 

 

‑G‑

 

gcount(), 463

Generated function, 398

get(), 460; 465

getline(), 466

gets(), 107

good(), 471

goto, 97

GUI, 18; 34

 

 

‑H‑

 

Heap, 229

hex, флаг, 448

 

 

‑I‑

 

IDE (Integrated Development Environment), 33

if, 48; 78

if‑else‑if, 81

Inline function, 283

inline, модификатор, 284; 574

insert(), 529; 537

Instantiating, 398

int, 38; 56; 61

Integral promotion, 74

Integrated Development Environment, 33

internal, флаг, 448

International Standards Organization, 18

ios, класс, 447

ios_base, класс, 440

iostate, перечисление, 470

isalpha(), 114

ISO, 18

 

 

‑J‑

 

Java, 29

 

 

‑K‑

 

kbhit(), 139

 

 

‑L‑

 

labs(), 191

Late binding, 393

left, флаг, 448

list, класс, 536

long double, 61; 62

long int, 61; 62

long, модификатор, 60

 

 

‑M‑

 

main(), 162

make_pair(), 546

malloc(), 233

managed, 609

Manipulator, 447

map, класс, 545

merge(), 537

MFC, 387

Microsoft Foundation Classes, 387

Microsoft Intermediate Language, 606

Modula‑2, 23; 41

MSIL, 606

Multiple indirection, 141

mutable, 509

 

 

‑N‑

 

name(), 475

namespace, 494

Namespace, 35

new, оператор, 230; 430

nothrow, 431

npos, 561

NULL, 594

 

 

‑O‑

 

Object Oriented Programming, 264

oct, флаг, 448

OOP, 264

open(), 456

openmode, перечисление, 457

operator, 320

Operator, 68

overload, 193

 

 

‑P‑

 

pair, класс, 546

Pascal, 23; 41

peek(), 467

Plain Old Data, 281

POD‑struct, 281

Pointer‑to‑member, 517

precision(), 451

Predicate, 524

Preprocessor, 570

printf(), 585

private, 281; 355

protected, 357

public, 267; 355

push_back(), 529; 537

put(), 460

putback(), 467

 

 

‑Q‑

 

qsort(), 503

Quicksort, алгоритм, 503

 

 

‑R‑

 

rand(), 138; 478

rdstate(), 470

read(), 461

Reference parameter, 181

register, спецификатор, 211

reinterpret_cast, оператор, 490

remove(), 600

return, инструкция, 166

rewind(), 597

rfind(), 565

right, флаг, 448

RTTI, 474

 

 

‑S‑

 

scanf(), 588

Scanset, 590

scientific, флаг, 448

seekg(), 468; 470

seekp(), 468; 470

setf(), 448

short int, 61

short, модификатор, 60

showbase, флаг, 448

showflags(), 450

showpoint, флаг, 448

showpos, флаг, 448

signed char, 61

signed int, 61

signed long int, 61; 62

signed short int, 61

signed, модификатор, 60

Simula67, 26

sizeof, 227; 263

skipws, флаг, 448

splice(), 537

Standard C++, 27

Standard Template Library, 26; 54; 522

static, модификатор, 208; 210; 506

static_cast, оператор, 489

std, пространство имен, 35; 438

stderr, поток, 585

stdin, поток, 585

stdout, поток, 585

STL, 26; 54; 522

strcat(), 109

strcmp(), 110

strcpy(), 109; 171

Stream, 439

streamsize, тип, 451

string, класс, 559

strlen(), 111; 161

struct, 238

switch, 87

 

 

‑T‑

 

tellg(), 470

tellp(), 470

template, 396; 405

template<>, 401; 413

terminate(), 417

this,317; 508

throw, 416

throw‑выражение, 427

time_t, тип даты, 251

tm, структура, 251

tolower(), 113

toupper(), 135

true, константа, 57

try, 416

Type promotion, 74

type_info, класс, 474

typeid, 474

typename, 396

 

 

‑U‑

 

unexpected(), 427

union, 258

unitbuf, флаг, 448

unmanaged, 609

unsetf(), 448; 449

unsigned char, 61

unsigned int, 61

unsigned long int, 61; 62

unsigned short int, 61

unsigned, модификатор, 60

uppercase, флаг, 448

using, 35; 497

virtual, 375; 381

Visual Basic, 23

Visual C++, 27; 33

void, 43; 47; 56

void‑функции, 169

volatile, спецификатор типа, 204

 

 

‑W‑

 

wcerr, 440

wchar_t, 56

wcin, 440

wclog, 440

wcout, 440

while, 91

width(), 451; 452

write(), 461

 

 

‑А‑

 

Абстрактный класс, 393

Алгоритм

adjacent_find(), 551

binary_search(), 551

copy(), 551

copy_backward(), 551

count(), 551

count_if(), 551

equal(), 551

equal_range(), 551

fill(), 551

fill_n(), 551

find(), 551; 552

find_end(), 551

find_first_of(), 552

for_each(), 552

generate(), 552

generate_n(), 552

includes(), 552

inplace_merge(), 552

iter_swap(), 552

lexicographical_compare(), 552

lower_bound(), 552

make_heap(), 552

max(), 552

max_element(), 552

merge(), 552

min(), 552

min_element(), 552

mismatch(), 552

next_permutation(), 552

nth_element(), 552

partial_sort(), 552

partial_sort_copy(), 552

partition(), 552

pop_heap(), 553

prev_permutation(), 553

push_heap(), 553

Quicksort, 105

random_shuffle(), 553

remove(), 553

remove_copy(), 553; 555

remove_copy_if(), 553

remove_if(), 553

replace(), 553

replace_copy(), 553; 555

replace_copy_if(), 553

replace_if(), 553

reverse(), 553; 557

rotate(), 553

search(), 553

search_n(), 553

set_difference(), 553

set_intersection(), 553

set_symmetric_difference(), 553

set_union(), 553

sort(), 553

sort_heap(), 553

stable_partition(), 553

stable_sort(), 553

swap(), 553

swap_ranges(), 553

transform(), 553; 557

unique(), 553

upper_bond(), 553

Алгоритмы, 523; 551

командной строки, 162

по умолчанию, 193

функции main(),45; 162

Ассемблер, 23; 514

Атрибут

attribute, 609

 

 

‑Б‑

 

Библиотека

<mscorlib.dll>, 609

STL, 522

Битовое множество, 525

Битовые поля, 256

Блок кода, 24; 51; 148

 

 

‑В‑

 

Вектор, 527

Виртуальное наследование, 375

Виртуальные функции, 381

Выражение, 73

условное, 79

 

‑Г‑

 

Глобальные переменные, 59

 

 

‑Д‑

 

Дек, 525

Декремент, 69

Деструктор, 273

Динамическая идентификация типов, 474

Динамическая инициализация, 300

Динамический массив, 526

Директива препроцессора, 570

#define, 570

#elif, 576

#endif, 575

#error, 574

#if, 575

#ifdef, 577

#ifhdef, 577

#include, 574; 602

#line, 580

#pragma, 580

#undef, 578

#using, 609

Дополнительный код, 62

 

 

‑З‑

 

Заголовки, 172

Заголовок

<algorithm>, 551

<bitset>, 525

<cctype>, 113

<cstdio>, 584

<cstdlib>, 44; 419; 504

<cstring>, 109

<ctime>, 213; 251; 298

<deque>, 525

<fstream>, 456

<functional>, 525

<iomanip>, 453

<iostream>, 35; 438; 440; 466

<list>, 525

<map>, 525

<new>, 430; 436

<queue>, 526

<set>, 526

<stack>, 526

<string>, 559

<typeinfo>, 474

<utility>, 525

<vector>, 526

stdio.h, 588

Заголовочный файл

<iostream.h>, 438

stdio.h, 584

 

 

‑И‑

 

Идентификатор, 53

Индекс, 102

Инициализация

динамическая, 300

массивов, 115

переменных, 66

Инкапсуляция, 27

Инкремент, 69

Инструкция

continue, 94

do‑while, 93

for, 49

goto, 97

if, 48; 78

return, 45; 166

switch, 87

while, 91

Исключение, 230; 416

bad_alloc, 430

bad_cast, 484

bad_typeid, 477

System::InvalidCastException, 608

Исключительная ситуация, 416

Итераторы, 523

входные, 523

выходные, 523

двунаправленные, 523

однонаправленные, 523

произвольного доступа, 523

реверсивные, 524

 

 

‑К‑

 

Класс, 266

allocator, 524

basic_ios, 440

basic_iostream, 440

basic_istream, 440

basic_ostream, 440

basic_streambuf, 440

fstream, 456

ifstream, 456

ios, 447; 457

ios_base, 440

list, 536

map, 545

ofstream, 456

pair, 546

string, 559

type_info, 474

vector, 527

абстрактный, 393

базовый, 352

полиморфный, 381; 475

производный, 352

шаблонный

pair, 525

Классы

контейнерные, 525

bitset, 525

deque, 525

list, 525

map, 525

multimap, 526

multiset, 526

priority_queue, 526

queue, 526

set, 526

stack, 526

vector, 526

обобщенные, 404

Ключевые слова C++, 53

Комментарий, 34

Компилятор

C++ Builder, 33

Visual C++, 33

Константа, 63

CLOCKS_PER_SEC, 298

EXIT_FAILURE, 419

EXIT_SUCCESS, 419

npos, 561

Конструктор, 272; 511

копии, 305; 311

параметризованный, 275

Контейнерные классы, 525

Контейнеры, 523

ассоциативные, 523; 545

векторы, 526

последовательные, 523

Куча, 229; 552; 553

Кэш, 212

 

 

‑Л‑

 

Лексема, 132

Линейный список, 525

Литерал, 63

восьмеричный, 64

строковый, 65; 106

шестнадцатеричный, 64

Локальные переменные, 57

 

 

‑М‑

 

Макроимя, 570; 582

Макроподстановка, 570

Макрос

_ _cplusplus, 582

_ _DATE_ _, 582

_ _FILE_ _, 582

_ _LINE_ _, 582

_ _STDC_ _, 582

_ _TIME_ _, 582

SEEK_CUR, 599

SEEK_END, 599

SEEK_SET, 599

Манипулятор, 452

boolalpha, 452

dec, 452

endl, 452

ends, 452

fixed, 452

flush, 452

hex, 452

internal, 452

left, 452

noboolalpha, 452

noshowbase, 452

noshowpoint, 452

noshowpos, 452

noskipws, 452

nounitbuf, 453

nouppercase, 453

oct, 453

resetiosflags(), 453

right, 453

scientific, 453

setbase(), 453

setfill(), 453

setiosflags(), 453; 454

setprecision(), 453

setw(), 453

showbase, 453

showpoint, 453

showpos, 453

skipws, 453

unitbuf, 453

uppercase, 453

ws, 453; 454

Манипуляторные функции, 454

Массив, 102; 131

двумерный, 114

инициализация, 115

многомерный, 115

одномерный, 102

объектов, 286

строк, 119

указателей, 137

Метаданные, 609

Метка, 98

Многоуровневая непрямая адресация, 141

Множество, 526

битовое, 525

Модели памяти, 140

Модификатор

const, 488; 508

inline, 284

long, 60

mutable, 509

short, 60

signed, 60

static, 208; 210

unsigned, 60

volatile, 488

максимальной длины поля, 590

точности, 587

Модификаторы типов, 60

Мультиотображение, 526

 

 

‑Н‑

 

Набор сканируемых символов, 590

Наследование, 29; 351

виртуальное, 375

 

 

‑О‑

 

Обобщенные

классы, 404

функции, 396

Объединения, 258

анонимные, 262

Объект, 28

Объект‑функция, 525

less, 525

Объявление

доступа, 370

класса, 360

опережающее, 297

переменных, 57

ООП, 25; 264

Оператор

!=, 475

&, 125

*, 125

==, 475

const_cast, 488

defined, 579

delete, 230

dynamic_cast, 483

new, 230; 430

reinterpret_cast, 490

sizeof, 227; 263

static_cast, 489

typeid, 474; 480; 486

XOR, 279; 221

ввода, 441

вывода, 441

декремента, 50

деления по модулю, 68

дополнения до 1, 221

И, поразрядный, 219

ИЛИ, поразрядный, 220

индексации, 340

инкремента, 50; 323

исключающее ИЛИ, 219; 221

НЕ, 221

присваивания, 38; 336

разрешения контекста, 297; 374

разрешения области видимости, 268; 297;374

разыменования адреса *, 523

Операторы, 68

арифметические, 68

декремента, 69

инкремента, 69

логические, 71

отношений, 71

поразрядные, 218

приведения типов, 483

присваивания,

составные, 225

сдвига, 222

Операция

приведения типов, 75

Опережающее объявление, 297

Отображение, 525; 545

Очередь, 526

приоритетная, 526

 

 

‑П‑

 

Параметры, 44

ссылочные, 181

формальные, 154

Перегрузка

конструкторов, 298

операторов, 319

ввода‑вывода, 441

шаблона функции, 401

функций, 190

Переменные, 38

глобальные, 59; 154

инициализация, 66

локальные, 57

Перечисление, 214

fmtflags, 447

iostate, 470

openmode, 457

Позднее связывание, 393

Поле

сборное

ios::basefield, 448

ios::adjustfield, 448

ios::floatfield, 448

Полиморфизм, 28; 377

Полиморфный класс, 381; 475

Порожденная функция, 398

Поток, 439

cerr, 440

cin, 440

clog, 440

cout, 440

stderr, 585

stdin, 585

stdout, 585

wcerr, 440

wcin, 440

wclog, 440

wcout, 440

двоичный, 439

стандартный

ввода, 585

вывода, 585

ошибок, 585

текстовый, 439

Предикат, 524

Приоритетная очередь, 526

Пространство имен, 494

std, 35; 438; 500

неименованное, 499

Прототип функции, 43; 171

Псевдопеременные

_ _FILE_ _, 580

_ _LINE_ _, 580

 

 

‑Р‑

 

Раннее связывание, 393

Распределитель памяти, 524

Расширение типа, 74

Реализация, 398

Рекурсия, 173

Ритчи, Дэнис, 23

 

 

‑С‑

 

Связывание

позднее, 393

раннее, 393

Специализация

класса

явная, 413

функции, 398

явная, 399

Спецификатор

explicit, 510

inline, 574

private, 355

protected, 357

public, 355

компоновки, 515

минимальной ширины поля, 586

Спецификатор класса памяти

auto, 206

extern, 206

register, 211

Спецификатор типа

const, 202

volatile, 204

Список, 536

сортировка, 541

Ссылки

на объекты, 291

на производные типы, 381

независимые, 188

Стандарт

С89, 584

С99, 584

Стандарт С, 23

Стандартная библиотека C++, 54

Стандартная библиотека шаблонов, 54

Стек, 152; 526

Страуструп, Бьерн, 25; 70

Строка, 36; 106

Строковый литерал, 106

Структура, 238

 

 

‑Т‑

 

Таблица строк, 136

Тег, 255

Тип

basic_string, 559

BinPred, 524

bool, 57; 74

char, 56

clock_t, 298

double, 56

float, 56

int, 56

iterator, 523

nothrow_t, 436

off_type, 468

pos_type, 470

ptrdiff_t, 554

size_t, 432; 504

streamsize, 451

string, 559

UnPred, 524

void, 57

wchar_t, 56

wstring, 559

 

 

‑У‑

 

Указатели, 123

на объекты, 289

на производные типы, 378

на функции, 502

на член класса, 517

Управляющие последовательности, 65

Условное выражение, 79

 

 

‑Ф‑

 

Фабрика объектов, 478

Файл, 439

Файловый указатель, 592

Факториал числа, 174

Флаг

boolalpha, 448

dec, 448

fixed, 448

hex, 448

internal, 448

left, 448

oct, 448

right, 448

scientific, 448

showbase, 448

showpoint, 448

showpos, 448

skipws, 448

unitbuf, 448

uppercase, 448

Флаг знака, 62

Формальные параметры, 58

Функции, 24; 147; 294

виртуальные, 381

встраиваемые, 283

манипуляторные, 454

обобщенные, 396

перегрузка, 190

сравнения, 524

Функция, 36; 41

abort(), 417; 419

abs(), 43; 167; 191; 403

asctime(), 252

assign(), 563

atof(), 164

bad(), 471

before(), 475

begin(), 529

clear(), 471

clock(), 213

close(), 458

compare(), 566

end(), 529

eof(), 463

erase(), 529; 532

exit(), 418; 419

fabs(), 191

fail(), 471

fclose(), 595

feof(), 595

ferror(), 597

fgetc(), 595

fill(), 451

find(), 565

flags(), 449

flush(), 467

fopen(), 593

fprintf), 600

fputc(), 594

fread(), 597

free(), 233

fscanf(), 600

fseek(), 599

fwrite(), 597

gcount(), 463

get(), 460; 465

getline(), 466

gets(), 107

good(), 471

insert(), 529; 532; 537

isalpha(), 114

kbhit(), 139

labs(), 191

localtime(), 251; 252

main(), 46; 162

make_pair(), 546

malloc(), 233; 431

merge(), 537

name(), 475

open(), 456

operator, 320

operator(), 525

peek(), 467

precision(), 451

printf(), 585

push_back(), 529; 537

push_front(), 537

put(), 460

putback(), 467

qsort(), 503

rand(), 138; 478

rdstate(), 470

read(), 461

remove(), 600

rewind(), 597

rfind(), 565

scanf(), 588

seekg(), 468; 470

seekp(), 468; 470

setf(), 448

showflags(), 450

splice(), 537

strcat(), 109

strcmp(), 110

strcpy(), 109; 171

strlen(), 111; 161

tellg(), 470

tellp(), 470

terminate(), 417

time(), 251

tolower(), 113

toupper(), 113; 135

unexpected(), 427

unsetf(), 448

width(), 451; 452

write(), 461

операторная, 320

параметризованная, 45

порожденная, 398

преобразования, 519

шаблонная, 398

 

 

‑Ц‑

 

Цикл

do‑while, 93

for, 49; 82

while, 91

бесконечный, 87

вложенный, 97

 

 

‑Ш‑

 

Шаблон, 396

Шаблонная функция, 398

 


Дата добавления: 2018-09-22; просмотров: 439; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!