Студопедия — Операторы 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; просмотров: 1078. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Роль органов чувств в ориентировке слепых Процесс ориентации протекает на основе совместной, интегративной деятельности сохранных анализаторов, каждый из которых при определенных объективных условиях может выступать как ведущий...

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

Тема: Кинематика поступательного и вращательного движения. 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью, проекция которой изменяется со временем 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью...

Тема: Составление цепи питания Цель: расширить знания о биотических факторах среды. Оборудование:гербарные растения...

В эволюции растений и животных. Цель: выявить ароморфозы и идиоадаптации у растений Цель: выявить ароморфозы и идиоадаптации у растений. Оборудование: гербарные растения, чучела хордовых (рыб, земноводных, птиц, пресмыкающихся, млекопитающих), коллекции насекомых, влажные препараты паразитических червей, мох, хвощ, папоротник...

Типовые примеры и методы их решения. Пример 2.5.1. На вклад начисляются сложные проценты: а) ежегодно; б) ежеквартально; в) ежемесячно Пример 2.5.1. На вклад начисляются сложные проценты: а) ежегодно; б) ежеквартально; в) ежемесячно. Какова должна быть годовая номинальная процентная ставка...

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