8. Создайте конвертер валют. Считайте курсы валют из файла в момент запуска программы. Введите сумму в окне ввода и предусмотрите возможность выбора валют для конверсии (например, пару меню).
9. Модифицируйте калькулятор из главы 7 так, чтобы выражение вводилось в окне редактирование, а результат возвращался в окне вывода.
10. Разработайте программу, в которой можно выбрать одну из нескольких функций (например, sin()
и log()
), введите параметры этих функций и постройте ее график.
Послесловие
Графический пользовательский интерфейс — неисчерпаемая тема. Большая часть этой темы касается стиля и совместимости с существующими системами. Более того, много сложностей возникает при работе с чрезвычайно разнообразными элементами управления окном (например, библиотека графического пользовательского интерфейса предлагает многие десятки альтернативных стилей кнопок), — раздолье для “ботаников”. Однако лишь немногие вопросы из этой области относятся к фундаментальным методам программирования, поэтому мы не будем углубляться в этом направлении. Другие темы, такие как масштабирование, вращение, анимация, трехмерные объекты и так далее, требуют изложения сложных фактов, связанных с графикой и/или математикой, которые мы затрагивать здесь не хотим.
Часть III
Данные и алгоритмы
Глава 17
Векторы и свободная память
“Используйте vector по умолчанию”.
Алекс Степанов (Alex Stepanov)
В этой и четырех следующих главах описываются контейнеры и алгоритмы из стандартной библиотеки языка С++, которую обычно называют STL. Мы рассматриваем основные возможности библиотеки STL и описываем их применение. Кроме того, излагаем ключевые методы проектирования и программирования, использованные при разработке библиотеки STL, а также некоторые низкоуровневые свойства языка, примененные при этом. К этим свойствам относятся указатели, массивы и свободная память. В центре внимания этой и следующих двух глав находятся проектирование и реализация наиболее популярного и полезного контейнера из библиотеки STL: vector
.
17.1. Введение
vector
. В векторе хранится последовательность элементов одного и того же типа. Мы можем обращаться к элементу вектора по индексу, расширять вектор с помощью функции push_back()
, запрашивать у вектора количество его элементов, используя функцию size()
, а также предотвращать выход за пределы допустимого диапазона. Стандартный вектор — удобный, гибкий, эффективный (по времени и объему памяти) и безопасный контейнер с точки зрения статических типов. Стандартный класс string
обладает как этими, так и другими полезными свойствами стандартных контейнерных типов, таких как list
и map
, которые будут описаны в главе 20.
vector
операция v.push_back(2.3)
добавляет число 2.3
в последовательность чисел типа double
и увеличивает на единицу счетчик элементов вектора v
(с помощью функции v.size()
). На самом нижнем уровне компьютер ничего не знает о таких сложных функциях, как push_back()
; все, что он знает, — как прочитать и записать несколько байтов за раз.
В этой и следующих двух главах мы покажем, как построить класс vector
, используя основные языковые возможности, доступные любому программисту. Это сделано для того, чтобы проиллюстрировать полезные концепции и методы программирования и показать, как их можно выразить с помощью средств языка С++. Языковые возможности и методы программирования, использованные при реализации класса vector
, весьма полезны и очень широко используются.