Идея кэширования вычислений заключается в следующем. Пусть нам потребовалось вычислить какое-то значение, и есть вероятность, что это нам потребуется сделать и в будущем. Тогда сохраним данное значение в памяти, и в следующий
Публикации рубрики - Программирование. Страница: 29
На этой странице собрано около (~) 13675 публикаций, конспектов, лекций и других учебных материалов по направлению: Программирование. Для удобства навигации можете воспользоваться навигацией внизу страницы.
Как известно, внутри процессора имеется специальная быстродействующая область памяти − кэш. В кэше хранятся копии часто используемых данных из оперативной памяти. Если при обращении к ячейке памяти она обнаруживается в кэше,
Инварианты Применение инвариантов относится не столько к отладке, сколько к вопросам написания качественного кода, содержащего минимум ошибок. Тем не менее, мы всё же решили вставить данный материал в эту главу ввиду его
До введения стандарта C++11 для обозначения неинициализированного указателя использовалась числовая константа 0 или макрос NULL, имевший значение ((void*)0). Такой подход вызывает проблемы, связанные с перегрузкой функции, так как
В С++11 появилась возможность инициализации объектов класса с помощью списка инициализации, по аналогии с инициализацией структур, агрегирующих простые типы данных либо другие структуры. Значения из списка инициализации будут
Суть данного антипаттерна заключается в разработке собственного решения задачи, для которой существует известное решение. Например, разработка классов-контейнеров, которые могут быть найдены в сторонних библиотеках. Причиной
К последовательным контейнерам относятся шаблонные классы std::vector, std::deque и std::list. На практике класс std::vector используется крайне широко, тогда как два оставшихся класса применяются довольно редко. Класс std::vector можно рассматривать
Шаблонные функцииМногие алгоритмы работают одинаково независимо от того, для обработки каких данных они применяются. Например, алгоритм сортировки методом пузырька будет выглядеть одинаково независимо от того, сортируем ли мы
При объявлении функции в языке С++ можно явным образом объявить, какие исключения могут быть сгенерированы из этой функции. Для этого используется ключевое слово throw. Например, можно явно объявить, что функция firstLine способна
Оператор throw без параметров, находящийся внутри обработчика исключения, используется для повторного возбуждения того же самого исключения, которое было поймано в текущем блоке catch. Он применяется в том случае, когда исключение
Полиморфизм ("много форм") – это свойство классов-родственников выполнять однотипные действия по-разному. Разберёмся, как можно реализовать полиморфизм в С++ при организации иерархий классов. Мы уже говорили, что в
Перегрузим для класса time_range операцию '<<' (вывод в поток). В качестве первого аргумента данной операции выступает объект класса std::ostream (именно такой тип имеют стандартные объекты cout и cerr). Поскольку мы не можем добавлять новые
Все элементы класса (и поля, и методы) можно разделить на три группы в зависимости от их области видимости: 1) public: открытые элементы, к которым имеется доступ из любого участка программы, использующей класс 2) private: скрытые элементы,
Основные понятия ООП Мы уже затрагивали некоторые понятия ООП в предыдущих разделах. Теперь пришло время систематизировать эти знания и освоить современный способ разработки программного обеспечения. ООП – способ разработки
В С++ имеется два способа работы с динамической памятью: • использование операций new и delete (основной способ, принятый в С++) • использование функций malloc (calloc, realloc) и free (способ, доставшийся в наследство от языка С). Первым способом мы
В С++, как и во многих других языках, память можно выделять статически (память выделяется до начала выполнения программы и освобождается после завершения программы) или динамически (память выделяется и освобождается в процессе
В пункте 1.1 было приведено определение термина "препроцессинг". В данном разделе мы рассмотрим использование директив препроцессора более подробно. Выше мы уже сталкивались с директивой #include, она позволяет вставить
Параметры функции и глобальные переменныеПараметры функции служат для обмена информацией между этой функцией и теми функциями, которые её вызывают. Обычно вызывающая функция должна передать в вызываемую функцию исходные
Немного уточним описание функции: тип имя_функции() {тело_функции} Верхняя строка описания – заголовок функции, нижняя – тело. Часто заголовок функции называют объявлением (далее мы рассмотрим ещё одно понятие, связанное с