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
| #include <vector>
#include <iostream>
using namespace std;
template <typename T>
class Matrice3D
{
private:
vector< T > buffer;
size_t size_i, size_j, size_k;
public:
// constructeur
Matrice3D( size_t size_i, size_t size_j, size_t size_k )
: size_i( size_i )
, size_j( size_j)
, size_k( size_k )
, buffer( std::vector<T>( size_i * size_j * size_k ) )
{}
// mutateur
T & operator() ( size_t i, size_t j, size_t k )
{
return buffer[ i + size_i*j + (size_i * size_j) * k ];
}
// accesseur
const T & operator() ( size_t i, size_t j, size_t k ) const
{
return buffer[ i + size_i*j + (size_i * size_j) * k ];
}
};
int main(int argc, char** argv)
{
Matrice3D<int> matrice( 2, 3, 4 ); // creation d'un matrice 3d de taille (2,3,4)
// remplissage de la matrice (utilisation du mutateur)
for ( size_t i=0; i<2; ++i )
for ( size_t j=0; j<3; ++j )
for (size_t k=0; k<4; ++k )
matrice( i, j, k ) = (int) ( i + j * k + 3 ) % 10;
// affichage de la matrice (utilisation de l'accesseur)
for (size_t k=0; k<4; ++k )
{
for ( size_t j=0; j<3; ++j )
{
for ( size_t i=0; i<2; ++i )
{
cout << matrice( i, j, k );
}
cout << endl;
}
cout << endl << endl;
}
cout << "end" << endl;
cin.get(); // attente que l'utilisateur appuie sue la touche entrée
return 0;
} |
Partager