if (t1 == clock_t(–1)) { // clock_t(–1) означает "clock()
// не работает "
cerr << "Извините, таймер не работает \n";
exit(1);
}
for (int i = 0; i
clock_t t2 = clock(); // конец отсчета
if (t2 == clock_t(–1)) {
cerr << "Извините, таймер переполнен \n";
exit(2);
}
cout << "do_something() " << n << " работала "
<< double(t2–t1)/CLOCKS_PER_SEC << " секунд "
<< " (точность измерения: " << CLOCKS_PER_SEC
<< " секунд )\n";
}
Явное преобразование double(t2–t1)
перед делением является необходимым, потому что число clock_t
может быть целым. Для значений t1
и t2
, возвращаемых функцией clock()
, величина double(t2–t1)/CLOCKS_PER_SEC
является наилучшим системным приближением времени в секундах, прошедшего между двумя вызовами.
Если функция clock()
не поддерживается процессором или временной интервал слишком длинный, то функция clock()
возвращает значение clock_t(–1)
.
Б.10.6. Другие функции
В заголовке
определены следующие функции.
Функция для сравнения (cmp
), используемая функциями qsort()
и bsearch()
, должна иметь следующий тип:
int (*cmp)(const void* p,const void* q);
Иначе говоря, функции сортировки не известен тип упорядочиваемых элементов: она просто интерпретирует массив как последовательность байтов и возвращает целое число, удовлетворяющее следующим условиям:
• оно является отрицательным, если *p
меньше, чем *q
;
• оно равно нулю, если *p
равно *q
;
• оно больше нуля, если *p
больше, чем *q
.
Подчеркнем, что функции exit()
и abort()
не вызывают деструкторы. Если хотите вызывать деструкторы для статических объектов и объектов, созданных автоматически (см. раздел A.4.2), генерируйте исключение.
Более полную информацию о функциях из стандартной библиотеки можно найти в книге
Б.11. Другие библиотеки
Исследуя возможности стандартной библиотеки, вы, конечно, не найдете чего-то, что могло бы быть полезным для вас. По сравнению с задачами, стоящими перед программистами, и огромным количеством доступных библиотек, стандартная библиотека языка C++ является довольно скромной. Существует много библиотек, предназначенных для решения следующих задач.
• Графические пользовательские интерфейсы.
• Сложные математические вычисления.
• Доступ к базам данных.
• Работа в сети.
• XML.
• Дата и время.
• Система манипуляции файлами.
• Трехмерная графика.
• Анимация.
• Прочее
Тем не менее эти библиотеки не являются частью стандарта. Вы можете найти их в Интернете или спросить у своих друзей и коллег. Не следует думать, что полезными являются только библиотеки, представляющие собой часть стандартной библиотеки.
Приложение В
Начало работы со средой разработки Visual Studio
“Вселенная не только страннее,
чем мы себе представляем,
но и страннее, чем мы можем представить”.
Дж. Б.С. Холдейн (J.B.S. Haldane)
В этом приложении описаны шаги, которые необходимо сделать до того, как вы войдете в программу, скомпилируете ее и запустите на выполнение с помощью среды разработки Microsoft Visual Studio.
В.1. Запуск программы
Для того чтобы запустить программу, вам необходимо как-то собрать файлы вместе (чтобы, если ссылаются друг на друга — например, исходный файл на заголовочный — они могли найти друг друга). Затем необходимо вызвать компилятор и редактор связей (если не потребуется сделать что-то еще, он позволит по крайней мере связать программу со стандартной библиотекой языка С++) и запустить (выполнить) программу. Существует несколько способов решения это задачи, причем в разных операционных системах (например, Windows и Linux) приняты разные соглашения и предусмотрены разные наборы инструментов. Тем не менее, все примеры, приведенные в книге, можно выполнить во всех основных системах, используя один из распространенных наборов инструментов. В этом приложении показано, как это сделать в одной из наиболее широко распространенных систем — Microsoft Visual Studio.
Лично мы, реализуя некоторые примеры, испытали то же чувство разочарования, которое испытывает любой программист, приступая к работе с новой и странной системой. В этом случае стоит обратиться за помощью. Однако, обращаясь за помощью, постарайтесь, чтобы ваш советчик научил вас тому, как решить задачу, а не решил ее за вас.