Студопедия

КАТЕГОРИИ:


Архитектура-(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; Просмотров: 429; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.024 сек.