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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
#include <iostream>
#include <memory>
int*** new_array( std::size_t x, std::size_t y, std::size_t z )
{
int* array = new int[x*y*z] {} ;
int** array2 = new int* [x*y] {} ;
for( std::size_t i = 0 ; i < x*y ; ++i ) array2[i] = array + i*z ;
int*** array3 = new int** [x] ;
for( std::size_t i = 0 ; i < x ; ++i ) array3[i] = array2 + i*y ;
return array3 ;
}
void delete_array( int*** array3 )
{
delete[] array3[0][0] ;
delete[] array3[0] ;
delete[] array3 ;
}
namespace smart
{
using array3 = std::unique_ptr< int**[], decltype(&::delete_array) > ;
array3 make_array( std::size_t x, std::size_t y, std::size_t z )
{ return array3( ::new_array(x,y,z), &::delete_array ) ;}
}
int main()
{
const std::size_t x = 3, y = 4, z = 5 ;
{
auto a3 = new_array( x, y, z ) ;
int n = 10 ;
for( std::size_t i = 0 ; i < x ; ++i )
{
for( std::size_t j = 0 ; j < y ; ++j )
{
for( std::size_t k = 0 ; k < z ; ++k ) std::cout << ( a3[i][j][k] = ++n ) << ' ' ;
std::cout << '\n' ;
}
std::cout << '\n' ;
}
delete_array(a3) ;
}
std::cout << "\n-------------------------\n\n" ;
{
auto a3 = smart::make_array(x,y,z) ;
int n = 10 ;
for( std::size_t i = 0 ; i < x ; ++i )
{
for( std::size_t j = 0 ; j < y ; ++j )
{
for( std::size_t k = 0 ; k < z ; ++k ) std::cout << ( a3[i][j][k] = ++n ) << ' ' ;
std::cout << '\n' ;
}
std::cout << '\n' ;
}
}
}
|