Мои исходные файлы по изучению языка c++

Заметки по c++

&& - и
|| - или
! - не

git push origin HEAD:master --force

TASK

Написать алгортим для расчета ближайшего лифта к человеку
попытки это сделать

Random Numbers

Для того что бы сгенерировать или заполнить массив случайными числами, нужно ОДИН раз вызвать функцию srand(time(NULL)); не забываем подключить библиотеку "ctime"; далее вызывая функцию rand() % 10 - (генерируем случайные числа от 1 до 10); будут генерироваться каждый раз случайные числа

Прототипы функций

Создание функции в начале программы - прототип функции
перейти в пример

Перегрузка функций

Чем больше реализаций функции, тем больше перегрузка функции
перейти в пример

Шаблонный функции

Шаблонные функции - template “далее функция” (принимает любые типы)
перейти в пример

Стек

Стек вызовов - последний зашел, первый вышел

Указатели

Указатель - p”имя переменной” = &(взятие адреса)”переменная на которую указываем”, тип данных указателя должен соответствовать типу данных на который он указывает, что бы разыменовать переменную (получить ее значение с указателя), нужно поставить звездочку(); Что бы изменить значение переменной через указатель, сначала нужно разыменовать его. Можно объявить и не присваивать ему значение; Принимает значение NULL, nullptr, 0; в отличие от ссылки; Если функция принимает указатель, то когда мы при вызове функции передаем аргумент нам нужно взять адрес того что мы передаем. Пример - Foo(&a);
перейти в пример

Арифметика указателей

Пример - см.папку pointers в c++
перейти в пример

Имя масиива (указатель)

Имя массива это и есть указатель на его первый элемент, если к нему (указателю) прибавить столько байт сколько вести один его элемент (нужно прибавлять элемент такого же типо как и массив) то сдвинемся на следующий его массив. Пример - *(arr(имя массива) + 1) - сдвигаемся на второй элемент массива; при условии что массив состоит из элементов типа int
перейти в пример

Cсылки

Пример - &aRef = a; (это ссылка на переменную а); У ссылок не оператора разыменования, через ссылку мы работаем с данными (в примере с переменной а); Различие между ссылкой и указателем: мы не можем объявить ссылку и не присвоить ей значение в отличие от указателя; Не принимает значение NULL, nullptr, 0;
перейти в пример

Динамическая память

Операторы выделения памяти new и delete. Пример - int *pa = new int; (создаем указатель pa; и с помощью слова new выделяем память вне нашей программы, типа int). Язык c++ не имеет сборщика мусора как некоторые другие языки (java, c#); соответственно после того как мы провели какие то операции над указателем, нам нужно очистить место в оперативной памяти компьютера, с помощью ключевого слова delete. Пример delete pa; ВСЕГДА после того как мы выделили память нужно ее ОЧИСТИТЬ; Что бы избежать утечки памяти (выделили память и не почистили).
перейти в пример

NULL и nullptr

Разница между NULL и nullptr - компилятор никогда не перепутает его с целочисленным типом данных (int). Если мы захотим очистить динамическую память, то сначала нужно вызвать delete, а потом затирать адрес через NULL или nullptr.
перейти в пример

Dynamic arrays

Для того что бы создать динамическй массив, нужно использовать указатель, ключевое слово new, и в конце нужно очистить память с помощью delete [] arr; Если массив является динамическим, то он будет находиться в динамической памяти
перейти в пример

Double Dynamic Arrays

Для того что бы создать двойной динмический массив, нужно использовать следующую конструкцию - int *arr = new int [rows]; и создается массив указателей
перейти в пример

Copy Dynamic Arrays

Массив - это указатель, который указывает на место в динмической памяти, где хранятся ячейки с элементами массива. Если создать 2 массива: array1 и array2, и произвести следующую операцию: array1 = array2; то array1 станет указателем на array2, а свои старые значения он потеряет и они так и останутся висеть в динамичсекой памяти