Обработка математики: 100%

Подразделы

Другие разделы

Дата и время

29/03/2025 10:43:15

Авторизация

Имя:
Пароль:
Зарегистрироваться
Восстановить пароль
 

printСтруктуры данных

printБазовые структуры данных

Элементарные типы данных (булевы значения, символы, числа) могут быть соединены в две базовые структуры данных, операции над которыми могут реализованы 1-2 машинными инструкциями.

Свойство Массивы фиксированного размера Кортежи (структуры)
Кирпичи
Однородные
Полигональная кладка
Неоднородные
Типы элементов Все элементы имеют одинаковый тип Элементы могут иметь разный тип
Объявление int a[10]; struct pair {
char c; int k; } a;
Доступ к элементам По номеру (индексу): a[i] По имени поля: a.k
Адрес элемента адрес объекта + i*размер элемента адрес объекта+суммарный размер предыдущих элементов
Вычисление адреса элемента во время выполнения во время компиляции

Индекс массива, состоящего из n элементов, является целым числом и принимает значения от 0 до n-1 или от 1 до n. В некоторых языках можно указать явно нижнюю и верхнюю границы изменения индекса.

Комбинируя структуры данных, можно получать более сложные:
double b[10][10]; – матрица (массив из массивов)
struct string { short len; char str[256]; } s; – строка (длина и массив символов)

Из элементарных типов данных можно выделить указатель, который хранит адрес объекта. В C++ различают понятия указатель и ссылка (неизменяемый указатель на существующий объект, при использовании ссылки происходит обращение к объекту). В других языках это различие не существенно, так как, с одной стороны, все переменные являются указателями на объекты (даже для элементарных типов данных), а, с другой стороны, не нужны специальные операции доступа к объекту также как у ссылок в С++. В некоторых компилируемых языках (Java, C#) для ускорения вычислений элементарные типы и некоторые структуры могут быть представлены непосредственным значением без указателя.

В С++ использование указателей и ссылок может приводить к ошибкам. Вместо них лучше использовать optional и shared_ptr, а применение обычных указателей нужно ограничить одной функцией в целях оптимизации вычислений, не передавая и не возвращая их другой функции. Для указателей на внутренние части объекта можно использовать unique_ptr. Для классов с умными указателями нужно определять конструктор копий и операцию присваивания, но автоматически определяемый деструктор будет корректным. Для ссылок допустимым является только возврат ссылки на статическое значение или объект, переданный по ссылке, или его часть. Компилятор выдает только предупреждение в случае ошибки.

loading