Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как правильно выделить память под матрицу? / 7 сообщений из 7, страница 1 из 1
14.09.2004, 05:33
    #32692882
artem_ka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно выделить память под матрицу?
А потом еще и как правильно прибить?
...
Рейтинг: 0 / 0
14.09.2004, 10:42
    #32693157
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно выделить память под матрицу?
авторКак правильно выделить память под матрицу?
А потом еще и как правильно прибить?

Тут нужен Neo...

сначала умеешь выделять память под вектор и забирать её обратно,
потом умеешь выделять память под вектор векторов, ну итдитп.
...
Рейтинг: 0 / 0
14.09.2004, 13:06
    #32693562
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно выделить память под матрицу?
Код: plaintext
1.
2.
3.
4.
5.
  typedef int int_array[ 100 ][ 200 ];
  typedef int int_array_row[ 200 ];
  int_array_row *a = new int_array;
  ...
  delete [] a;
...
Рейтинг: 0 / 0
14.09.2004, 14:01
    #32693735
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно выделить память под матрицу?
1 вариант с помощью STL

std::vector<std::vector<double> > vec(N, std::vector<double>(M, 0.0));

2 вариант линейная развертка

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
#include <iostream>
#include <vector>

template<size_t R, size_t C>
struct matrix_t
{
     enum { 
         capacity = R*C, 
         row_count = R,
         column_count = C,
     };

     size_t operator()(size_t r, size_t c) const
     {
           return (r*C + c);
     }

};


int main(int argc, char *argv[])
{
	typedef matrix_t< 10 ,  20 > matrix;

	matrix index;
	std::vector<double> vec(matrix::capacity,  0 . 0 );

	for(int i =  0 ; i < matrix::row_count; i++)
	   for(int j =  0 ; j < matrix::column_count; j++)
	   {
		   std::cout << i << " " << j << " " << (vec[index(i, j)] = i*j) << '\n';
	   }
}
...
Рейтинг: 0 / 0
20.09.2004, 13:09
    #32702149
istalker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно выделить память под матрицу?
int **m;
m = new int *[nRows];
for (int i = 0; i < nRows; i++)
{
m = new int[nColumns];
}
///////////////////
for (int i = 0; i < nRows; i++)
{
delete [] m;
}
delete [] m;
...
Рейтинг: 0 / 0
20.09.2004, 13:14
    #32702164
istalker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно выделить память под матрицу?
oops, popravka
istalkerint **m;
m = new int *[nRows];
for (int i = 0; i < nRows; i++)
{
m[ i ] = new int[nColumns];
}
///////////////////
for ( i = 0; i < nRows; i++)
{
delete [] m[ i ];
}
delete [] m;
...
Рейтинг: 0 / 0
20.09.2004, 19:21
    #32703108
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно выделить память под матрицу?
lutse ispolizovati malloc, potom lehce mastabirovati tablitu v slucae nadobnosti:

void **create_table(size_t nCols, size_t nLines, size_t nSize)
{
void **lp_table, **lp_item;
size_t li_index, ldim;
size_t pos;
if(!nCols || !nLines || !nSize) return NULL;
if ((lp_item = lp_table = (void **)malloc(nCols * sizeof(void*))))
{
ldim = nLines * nSize;
if (!(pos = (size_t)malloc(nCols * ldim)))
{
free(lp_table);
return NULL;
}
for(pos-=ldim, li_index = nLines; li_index--; *lp_item++ = (void*)(pos+=ldim));
}
return lp_table;
}

void destroy_table(void *** table)
{
if(*table)
{
if(**table) free(**table);
free(*table);
}
*table = NULL;
}

primer ispolizovania:
int **tab_test = (int**)create_table(3, 3, sizeof(int));
...
destroy_table(&tab_test);

konecino pod eto dela mojno delati obolociku citobi ne mucitsea preobrazovivati pri sozdanii, nu i sootvetstvenno, mojno escio dobaviti functiu realloc.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как правильно выделить память под матрицу? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]