![]() КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
New тип_массива
Динамические массивы Операция new при использовании с массивами имеет следующий формат: Пример 60. Выделение динамической памяти: 1. int *a=new int[100]; /*выделение динамической памяти размером 100*sizeof(int) байтов*/ double *b=new double[12]; /* выделение динамической памяти размером 12*sizeof(double) байтов */ 2. long(*la)[4]; /*указатель на массив из 4 элементов типа long*/ lа=new[2][4]; /*выделение динамической памяти размером 2*4*sizeof(long) байтов*/ 3. int**matr=(int**)new int[5][12]; /*еще один способ выделения памяти под двумерный массив*/ 4. int **matr; matr=new int*[4]; /*выделяем память под массив указателей int* */ for(int I=0;I<4;I++) matr[I]=new int[6]; /*выделяем память под строки массива*/
Указатель на динамический массив затем используется при освобождении памяти с помощью операции delete.
Пример 61. Освобождение динамической памяти. delete[] a //освобождает память, выделенную под массив, если а адресует его начало delete[]b; delete[] la; for(I=0;I<4;I++) delete[] matr[I]; //удаляем строки delete [] matr; //удаляем массив указателей.
Пример 62. Удалить из матрицы строку с номером K. #include "stdafx.h" #include <iostream> #include <stdlib.h> #include <conio.h> using namespace std; void main() { int n,m; //размерность матрицы int i,j; cout<<"\nEnter n"; cin>>n; //ввод количества строк cout<<"\nEnter m"; cin>>m; // ввод количества столбцов //выделение памяти int **matr=new int* [n]; /* массив указателей на строки*/ for(i=0; i<n; i++) matr[i]=new int [m]; /*память под элементы матрицы*/ //заполнение матрицы for(i=0; i<n; i++) for(j=0; j<m; j++) matr[i][j]=rand()%10; //заполнение матрицы //печать сформированной матрицы for(i=0; i<n; i++) { for(j=0; j<m; j++) cout<<matr[i][j]<<" "; cout<<"\n"; } //удаление строки с номером к int k; cout<<"\nEnter k"; cin>>k; int**temp=new int*[n-1]; /*формирование новой матрицы*/ for(i=0; i<n-1; i++) temp[i]=new int[m]; //заполнение новой матрицы int t; for(i=0, t=0; i<n; i++) if(i!=k) { for(j=0; j<m; j++) temp[t][j]=matr[i][j]; t++; } //удаление старой матрицы for(i=0; i<n; i++) delete matr[i]; //удаляем строки delete[]matr; //удаляем массив указателей n--; //печать новой матрицы for(i=0; i<n; i++) { for(j=0; j<m; j++) cout<<temp[i][j]<<" "; cout<<"\n"; } getch(); } #include "stdafx.h" #include <iostream> #include <stdlib.h> #include <conio.h> using namespace std; void main() { int n,m; //размерность матрицы int i,j; cout<<"\nEnter n"; cin>>n; //ввод количества строк cout<<"\nEnter m"; cin>>m; // ввод количества столбцов //выделение памяти int **matr=new int* [n]; /* массив указателей на строки*/ for(i=0; i<n; i++) matr[i]=new int [m]; /*память под элементы матрицы*/ //заполнение матрицы for(i=0; i<n; i++) for(j=0; j<m; j++) *(*(matr+i)+j)=rand()%10; //заполнение матрицы //печать сформированной матрицы for(i=0; i<n; i++) { for(j=0; j<m; j++) cout<<*(*(matr+i)+j)<<" "; cout<<"\n"; } //удаление строки с номером к int k; cout<<"\nEnter k"; cin>>k; int**temp=new int*[n-1]; /*формирование новой матрицы*/ for(i=0; i<n-1; i++) temp[i]=new int[m]; //заполнение новой матрицы int t; for(i=0, t=0; i<n; i++) if(i!=k) { for(j=0; j<m; j++) *(*(temp+t)+j)=*(*(matr+i)+j); t++; } //удаление старой матрицы for(i=0; i<n; i++) delete matr[i]; //удаляем строки delete[]matr; //удаляем массив указателей n--; //печать новой матрицы for(i=0; i<n; i++) { for(j=0; j<m; j++) cout<<*(*(temp+i)+j)<<" "; cout<<"\n"; } getch(); } #include "stdafx.h" #include <iostream> #include <stdlib.h> #include <conio.h> using namespace std; void main() { int n,m; //размерность матрицы int i,j; cout<<"\nEnter n"; cin>>n; //ввод количества строк cout<<"\nEnter m"; cin>>m; // ввод количества столбцов //выделение памяти int **matr=new int* [n]; /* массив указателей на строки*/ for(i=0; i<n; i++) matr[i]=new int [m]; /*память под элементы матрицы*/ //заполнение матрицы for(i=0; i<n; i++) for(j=0; j<m; j++) *(*(matr+i)+j)=rand()%10; //заполнение матрицы //печать сформированной матрицы for(i=0; i<n; i++) { for(j=0; j<m; j++) cout<<*(*(matr+i)+j)<<" "; cout<<"\n"; } //сортировка матрицы for(j=0; j<m; j++) {for (int i=n-1; i > 0; --i) { int*p = &(*(*(matr)+j)); cout<<*p<<" \n"; int*h = &(*(*(matr+1)+j)); for (int k=0; k < i; ++k, p++,h++) if (*p < *h) { int tmp = *p; *p = *h; *h = tmp; }
} } //печать сформированной матрицы cout<<"\nMATRIX\n"; for(i=0; i<n; i++) { for(j=0; j<m; j++) cout<<*(*(matr+i)+j)<<" "; cout<<"\n"; } cout<<"\nMATRIX\n"; for(i=0; i<n; i++) {int*p = &(*(*(matr+i)+0)); for(j=0; j<m; j++,p++) cout<<*p<<" "; cout<<"\n"; }
getch(); }
Дата добавления: 2014-11-29; Просмотров: 457; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |