c/c++における動的申請二次元配列の実現
3295 ワード
#include "stdafx.h"
#include <iostream>
#include <new>
#include <string>
#include <cstdlib>
using namespace std;
//c++ new delete
template<class T>
T** new_Array2D(int row, int col)
{
int size = sizeof(T);
int point_size = sizeof(T*);
// , sizeof(T*)*row row
T** arr = (T**)malloc(point_size*row + size*row*col);
if (arr != NULL)
{
T *head = (T*)((int)arr + point_size*row);
for (int i=0; i<row; i++)
{
arr[i] = (T*)((int)head + i*col*size);
for (int j=0; j<col; j++)
{
new (&arr[i][j])T;
}
}
}
return (T**)arr;
}
//
template<class T>
void delete_Arrar2D(T** arr,int row, int col)
{
for (int i=0; i<row; i++)
{
for (int j=0; j<col; j++)
{
arr[i][j].~T();
}
}
if (arr != NULL)
{
free((void**)arr);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int nRow,nCol;
//
scanf("%d,%d",&nRow,&nCol);
//
string**p = new_Array2D<string>(nRow, nCol);
//
int i, j;
for (i=0; i<nRow; i++)
{
for (j=0; j<nCol; j++)
{
char szTemp[30];
sprintf(szTemp,"%d",(i+1)*(j+1));
p[i][j] = szTemp;
}
}
//
for (i=0; i<nRow; i++)
{
for (j=0; j<nCol; j++)
{
printf("%4s",p[i][j].c_str());
}
putchar('
');
}
delete_Arrar2D<string>(p, nRow, nCol);
return 0;
}
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
// malloc free
template<typename T>
T** malloc_Array2D(int row, int col)
{
int size = sizeof(T);
int point_size = sizeof(T*);
// , point_size *row row
T **arr = (T**)malloc(point_size*row + size*row*col);
if (arr != NULL)
{
memset(arr,0, point_size*row + size*row*col);
T *head =(T*)((int)arr + point_size*row);
while (row --)
{
arr[row] = (T*)((int)head + row*col*size);
}
}
return (T**)arr;
}
//
void free_Array2D(void **arr)
{
if (arr != NULL)
{
free(arr);
}
}
//int _tmain(int argc, _TCHAR* argv[])
//{
// int nRow,nCol;
// //
// scanf("%d,%d",&nRow,&nCol);
//
// int **p = malloc_Array2D<int>(nRow, nCol);
//
// //
// int i, j;
// for (i=0; i<nRow; i++)
// {
// for (j=0; j<nCol; j++)
// {
// p[i][j] = (i+1)*(j+1);
// }
// }
//
// //
// for (i=0; i<nRow; i++)
// {
// for (j=0; j<nCol; j++)
// {
// printf("%4d",p[i][j]);
// }
// putchar('
');
// }
//
// free_Array2D((void**)p);
//}
#include "stdafx.h"
#include <iostream>
using namespace std;
// C
int _tmain(int argc, _TCHAR* argv[])
{
//
//
const int MAXCOL = 3;
int nRow;
scanf("%d",&nRow);//
//
int *pp_arr = new int[nRow*MAXCOL];
int (*p)[MAXCOL] = (int(*)[MAXCOL])pp_arr;
//
int i, j;
for (i=0; i<nRow; i++)
{
for (j=0; j<MAXCOL;j++)
{
p[i][j] = (i+1)*(j+1);
}
}
//
for (i=0; i<nRow; i++)
{
for (j=0; j<MAXCOL; j++)
{
printf("%5d",p[i][j]);
}
putchar('
');
}
delete[] pp_arr;
return 0;
}