Студопедия — Операторы new и delete
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Операторы new и delete






Формат:

Переменная-указатель= new тип_переменной [размер];

размер определяет число элементов массива.

Ограничения при размещении массива:

· его нельзя инициализировать;

· для освобождения динамически размещённого массива необходимо использовать следующую форму оператора: delete[] переменная-указатель; квадратные скобки информируют оператор delete, что необходимо освободить память, выделенную для массива.

Пример 11.5

Выделяется память для массива из 10 элементов типа float со значениями элементов от 100 до 109, а затем содержимое массива выводится на экран.

#include< iostream.h>

#include< escept.h>

int main() {

float *p;

int i;

try

{ p=new float[10]; // получение 10 элементов }

catch (xalloc xa)

{ cout < < ”размещение невозможно\n”;

return 1; }

for(i=0; i< 10; i++) //присваивание значений от 100 до 109

p[i]=100.00+i;

delete []p; //удаление всего массива

return 0;

}

 

Пример 11.6

# include < stdio.h>

int main(void)

{

char* s;

int t;

s=new char[80];

printf (" Vvedite stroku\n");

gets(s);

for(t=80; t> =0; t--)

printf(“%c”, s[t]);

delete s;

return 0;

}

 

Данная программа показывает способ использования динамически выделенного массива для чтения символов с клавиатуры с помощью функции gets().

Для языка С++ реализованы операторы new – захвата памяти и delete – освобождения памяти, доступные пользователю в консольном режиме среды Visual C++.

 

Формат операторов:

Указатель = new тип (значение);

delete указатель;

Пример 11.7

Распределить память для целочисленной переменной data и инициализировать значением 10.

int *data;

data = new int(10);

delete data;

Пример 11.8

Распределить память для массива целочисленных переменных X1 размерностью 80.

int *X1;

X1 = new int [80];

delete []X1;

 

Память для массива освобождается с помощью оператора delete[]. С помощью new могут быть размещены любые типы данных. Массив нельзя инициализировать с помощью оператора new.

 

Пример 11.9

Распределить память для массива из 10 элементов типа float со значениями элементов от 100 до 109, а затем содержимое массива вывести на экран.

#include< iostream.h>

int main()

{ float *X1; int i;

try

{ X1=new float[10]; // распределить 10 элементов }

catch (char * code)

{ cout < < ”Alocation error\n”;

return 1;

}

for(i=0; i< 10; i++) //присваивание значений от 100 до 109

X1[i]=100.00+i;

printf(“Array X1: \n”);

for(i=0; i< 10; i++)

printf(“%f\n”, X1[i]) // печать очередного элемента

getchar();

delete []X1; // удаление всего массива

return 0;

}

 

В данной программе блок try/catch отслеживает ошибки выделения памяти. Если внутри блока try возникает прерывание, управление передается в блок catch. Если прерывание не возникло, блок catch не выполняется.

В этом примере используются операторы ввода-вывода стандартных типов данных и строк:

операция cout < < (операция передачи в стандартный выходной поток cout);

операция cin > > (операция извлечения из стандартного входного потока cin).

Пример 11.10

cout< < ”Vvedite chislo”;

cin> > n;

 

Это операции языка С++. Они не требуют форматирующих строк и спецификаторов преобразования для указания на тип входных и выходных данных, а также при использовании с операцией извлечения из потока переменной n не предшествует операция взятия адреса &.

 

Пример 11.11

Распределить память для массива из 80 символов. Прочитать в эту память строку с клавиатуры. Вывести полученный массив символов на экран в обратном порядке. Освободить память.

# include < stdio.h>

int main(void)

{ char* string; int t;

string =new char[80];

if (string ==0)

{

printf (" Alocation error\n");

exit(1);

}

printf (" Vvedite stroku\n");

gets(string);

for(t=80; t> =0; t--)

printf(“%c”, string [t]);

getchar();

delete []string;

return 0;

}

 

В данном примере для контроля корректности распределения памяти используется проверка указателя string на нуль. Если указатель равен нулю, то выделение памяти выполнено некорректно и следует прекратить выполнение программы или выполнить какие-либо другие аварийные действия.

Данная программа показывает способ использования динамически выделенного массива для чтения символов с клавиатуры с помощью функции gets().

Часто операторы new и delete используются для работы с массивами, длина которых заранее неизвестна. Например, если количество элементов массива определяется в программе непосредственно перед использованием массива.

Пример 11.12

Подсчитать сумму элементов массива переменной длины. Как правило, перед вводом значений элементов массива пользователю предлагается ввести количество элементов массива, а затем сами элементы массива:

#include < stdio.h>

void main(void)

{

int *a;

int k;

int i;

printf(" Vvedite kolichstvo elementov massiva: \n");

scanf(" %d", & k);

a = new int[k]; // выделение памяти под массив

for(i=0; i< k; i++) // ввод элементов массива

scanf(" %d", & a[i]);

int sum=0;

for(i=0; i< k; i++) // расчет суммы элементов массива

sum=sum+a[i]);

printf(" %d", sum); // вывод суммы элементов массива

getchar();

delete []a; // освобождение памяти

}

Варианты индивидуальных заданий

1. Задать массив структур student. Распределить память для элементов массива с помощью функции get_mem. Инициализировать 5 элементов массива константами. Вывести массив структур на экран. Освободить память.

2. Задать массив структур student. Распределить память для элементов массива с помощью функции get_mem. Инициализировать 5 элементов массива путем ввода информации с клавиатуры (scanf). Вывести массив структур на экран. Освободить память.

3. Задать массив структур student. Распределить память для элементов массива с помощью функции get_mem. Инициализировать 10 элементов массива константной информацией (поле ФИО). Остальную информацию (номер телефона, e-mail) вводить с клавиатуры (scanf). Вывести массив структур на экран. Освободить память.

4. Задать 2 массива структур student1 и student2. Распределить память для элементов массивов с помощью функции get_mem. Инициализировать элементы массивов путем ввода информации с клавиатуры (scanf). Первым вводится с клавиатуры номер группы. Далее для группы 1 информация попадает в массив student1, для группы 2 – в массив student2. Вывести оба массива структур на экран. Освободить память.

5. Задать 2 массива структур student1 и student2. Распределить память для элементов массивов с помощью функции get_mem. Инициализировать элементы массивов путем ввода информации с клавиатуры (scanf). Первым вводится с клавиатуры номер группы. Далее для группы 1 информация попадает в массив student1, для группы 2 – в массив student2. Вывести из обоих массивов на экран информацию обо всех студентах и их телефонах. Освободить память.

6. Задать 2 массива структур student1 и student2. Распределить память для элементов массивов с помощью функции get_mem. Инициализировать элементы массивов путем ввода информации с клавиатуры (scanf). Первым вводится с клавиатуры номер группы. Далее для группы 1 информация попадает в массив student1, для группы 2 – в массив student2. Вывести из обоих массивов на экран информацию обо всех студентах и их e-mail. Освободить память.

7. Задать 2 массива структур student­­1 и student2. Распределить память для элементов массивов с помощью функции get_mem. Инициализировать элементы массивов путем ввода информации с клавиатуры (scanf). Первым вводится с клавиатуры номер группы. Далее для группы 1 информация попадает в массив student1, для группы 2 – в массив student2. Вывести из обоих массивов на экран информацию обо всех студентах со средним баллом выше 8. Освободить память.

8. Задать 2 массива структур student1 и student2. Распределить память для элементов массивов с помощью функции get_mem. Инициализировать элементы массивов путем ввода информации с клавиатуры (scanf). Первым вводится с клавиатуры номер группы. Далее для группы 1 информация попадает в массив student1, для группы 2 – в массив student2. Вывести из обоих массивов на экран информацию о всех студентах со средним баллом ниже 5. Освободить память.

9. Задать массив структур «ведомость» (сдачи экзамена). Распределить память для элементов массива. Инициализировать элементы массива путем ввода информации с клавиатуры (scanf). Вывести массив структур на экран. Освободить память.

10. Задать массив структур «ведомость» (сдачи экзамена). Распределить память для элементов массива. Инициализировать 10 элементов массива константной информацией (поля ФИО, номер зачетки). Остальную информацию (дата сдачи, оценка) вводить с клавиатуры (scanf). Вывести массив структур на экран. Освободить память.

11. Задать массив структур «ведомость» (сдачи экзамена). Распределить память для элементов массива. Инициализировать 10 элементов массива константной информацией (поля ФИО, номер зачетки). Остальную информацию (дата сдачи, оценка) вводить с клавиатуры (scanf). Вывести на экран список студентов, получивших неудовлетворительные оценки. Освободить память.

12. Задать массив структур «ведомость» (сдачи экзамена). Распределить память для элементов массива. Инициализировать 10 элементов массива константной информацией (поля ФИО, номер зачетки). Остальную информацию (дата сдачи, оценка) вводить с клавиатуры (scanf). Вывести на экран отчет о количестве каждой оценки в ведомости. Освободить память.

13. Задать 2 массива структур «ведомость» (сдачи экзамена) для группы 1 и группы 2. Распределить память для элементов массивов. Инициализировать по 10 элементов массивов константной информацией (поля ФИО, номер зачетки). Остальную информацию (дата сдачи, оценка) вводить с клавиатуры (scanf). Вывести на экран отчет о количестве каждой оценки по двум группам. Освободить память.

14. Задать 2 массива структур «ведомость» (сдачи экзамена) для группы 1 и группы 2. Распределить память для элементов массивов. Инициализировать по 10 элементов массивов константной информацией (поля ФИО, номер зачетки). Остальную информацию (дата сдачи, оценка) вводить с клавиатуры (scanf). Вывести на экран список студентов из обоих групп, получивших неудовлетворительные оценки. Освободить память.

15. Задать 2 массива структур «ведомость» (сдачи экзамена) для разных предметов, но для одной группы. Распределить память для элементов массивов. Инициализировать по 10 элементов массивов константной информацией (поля ФИО, номер зачетки). Остальную информацию (дата сдачи, оценка) вводить с клавиатуры (scanf). Вывести на экран список студентов, получивших неудовлетворительные оценки по двум предметам. Освободить память.

16. Задать массив структур «изучаемые дисциплины». Распределить память для элементов массива. Инициализировать элементы массива путем ввода информации с клавиатуры (scanf). Вывести массив структур на экран. Освободить память.

17. Задать массив структур «изучаемые дисциплины». Распределить память для элементов массива. Инициализировать элементы массива путем ввода информации с клавиатуры (scanf). Вывести на экран перечни дисциплин, читаемых каждым преподавателем. Освободить память.

18. Задать массив структур «изучаемые дисциплины». Распределить память для элементов массива. Инициализировать элементы массива путем ввода информации с клавиатуры (scanf). Вывести на экран перечни дисциплин, читаемых в каждом семестре. Освободить память.

19. Задать массив структур «изучаемые дисциплины». Распределить память для элементов массива. Инициализировать 10 элементов массива константной информацией (поле «наименование дисциплины»). Остальную информацию (поля «номер семестра», «фамилия преподавателя») вводить с клавиатуры (scanf). Вывести на экран полученный массив структур. Освободить память.

20. Задать массив структур «изучаемые дисциплины». Распределить память для элементов массива. Инициализировать элементы массива путем ввода информации с клавиатуры (scanf). Вывести на экран перечень дисциплин, читаемых в первом семестре. Освободить память.

21. Задать массив структур «изучаемые дисциплины». Распределить память для элементов массива. Инициализировать 10 элементов массива константной информацией (поле «наименование дисциплины»). Остальную информацию (поля «номер семестра», «фамилия преподавателя») вводить с клавиатуры (scanf). Вывести на экран перечень дисциплин, читаемых в первом семестре. Освободить память.

22. Создать массив из 20 строк с динамическим распределением памяти. Инициализировать массив последовательностью натуральных чисел. Вывести массив на экран построчно в обратном порядке. Освободить память.

23. Задать массив из 10 строк. Распределить динамическую память для массива строк. Инициализировать массив информацией, введенной с клавиатуры. Вывести массив на экран построчно. Освободить память.

24. Определить динамический массив целых положительных чисел. Ввести числа в массив с клавиатуры. Вывести все четные числа на экран. Освободить память.

25. Определить динамический массив целых чисел. Ввести числа в массив с клавиатуры. Вывести все отрицательные числа на экран. Освободить память.

26. Определить динамический массив целых чисел. Ввести числа в массив с клавиатуры. Определить минимальное число и вывести его на экран. Освободить память.

27. Определить динамический массив целых чисел. Ввести числа в массив с клавиатуры. Определить максимальное число и вывести его на экран. Освободить память.

28. Определить динамический массив целых чисел. Ввести числа в массив с клавиатуры. Вычислить среднее арифметическое массива без учета максимального и минимального элементов. Освободить память.

29. Определить динамический массив целых чисел. Ввести числа в массив с клавиатуры. Вычислить, сколько раз в массиве встречается число, введенное с клавиатуры. Освободить память.

30. Определить динамический массив целых чисел. Ввести числа в массив с клавиатуры. Вычислить индекс в массиве числа, введенного с клавиатуры. Освободить память.

31. Написать программу ввода динамического массива (с помощью new) целых положительных чисел и распечатки на экране тех чисел, которые делятся без остатка на 3.

32. Вероятность того, что в указанный морской порт в день прибывает k кораблей, составляет Р()=(3^k)*(е^3)/(k!). Используя оператор new(), написать программу для вычисления данной вероятности.







Дата добавления: 2014-11-10; просмотров: 1079. Нарушение авторских прав; Мы поможем в написании вашей работы!



Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

Закон Гука при растяжении и сжатии   Напряжения и деформации при растяжении и сжатии связаны между собой зависимостью, которая называется законом Гука, по имени установившего этот закон английского физика Роберта Гука в 1678 году...

Характерные черты официально-делового стиля Наиболее характерными чертами официально-делового стиля являются: • лаконичность...

Этапы и алгоритм решения педагогической задачи Технология решения педагогической задачи, так же как и любая другая педагогическая технология должна соответствовать критериям концептуальности, системности, эффективности и воспроизводимости...

Анализ микросреды предприятия Анализ микросреды направлен на анализ состояния тех со­ставляющих внешней среды, с которыми предприятие нахо­дится в непосредственном взаимодействии...

Типы конфликтных личностей (Дж. Скотт) Дж. Г. Скотт опирается на типологию Р. М. Брансом, но дополняет её. Они убеждены в своей абсолютной правоте и хотят, чтобы...

Гносеологический оптимизм, скептицизм, агностицизм.разновидности агностицизма Позицию Агностицизм защищает и критический реализм. Один из главных представителей этого направления...

Studopedia.info - Студопедия - 2014-2024 год . (0.008 сек.) русская версия | украинская версия