Динамический массив с. Добавления элемента в массив
Скачать 13.53 Kb.
|
Практика 1. Реализовать структуру данных «Динамический массив» и набор функций для работы с ней. Необходимо реализовать следующие функции: Добавления элемента в массив Удаление элемента из массива Вставка элемента в начало Вставка элемента в конец Вставка после определенного элемента Сортировка массива Линейный поиск элемента в массиве Бинарный поиск элемента в массиве Провести исследовательскую работу. Сделать замеры времени выполнения каждой функции для различных объемов данных (например, 10, 100, 1000), отобразить на графиках результаты измерений. Сделать выводы. Работа со структурами. Структура — это, некое объединение различных переменных (даже с разными типами данных), которому можно присвоить имя. Например, можно объединить данные об объекте Дом: город (в котором дом находится), улица, количество квартир, интернет (проведен или нет) и т.д. в одной структуре. В общем, можно собрать в одну совокупность данные обо всем, что угодно, точнее обо всем, что необходимо конкретному программисту. В языке С++ структуры создаются ключевым словом struct. struct Person { string name; string surename; int birthYear; } Обращение к элементам структур осуществляется помощью операторов «.» и «->». Если работа идет с объектом значением, то используется «.». Если работа идет с указателем на объект, то используется оператор «->». void someFunc1() { Person pers; pers.name = “Jonh”; pers.surename = “Smith”; pers.birthYear = 1990; } void someFunc1() { Person* pers = new Person(); pers->Name = “Jonh”; pers->Surename = “Smith”; pers->BirthYear = 1990; delete pers; } Передача объектов структур в функции можно осуществить 2 способами: по указателю и по ссылке. По сути, в обоих случаях в функцию передается адрес переменной в памяти. Разница в том, что при передаче по указателю, в функции можно переназначить переменную, и потерять исходную переменную, в случае с передачей по ссылке это исключено. Помимо этого, есть разница в синтаксисе работы с переменной. При этом все же большие объекты (структуры с большим количеством полей) передают через указатели, это связано с тем, что в промышленном программировании такие объекты выделяются в динамической памяти, а для этого используются указатели. Поэтому, фактически на практике у нас почти всегда идет работа с указателями. Массивы передаются ТОЛЬКО по указателю. void setBirthYear1(Person* pers, int year) { Pers->birthYear = 1990; } void setBirthYear2(Person& pers, int year) { Pers.birthYear = 1990; } void someFunc() { Person p1; //переменная в стеке setBirthYear1(&p1); setBirthYear2(p1); Person* p2 = new Person(); //указатель на переменную в динамической памяти setBirthYear1(p2); setBirthYear2(&(*p2)); delete p2; } |