[C con Clase] Duda sobre vectores en 3D

Miguel Alejandro Jimenez Ramirez cerberbero en gmail.com
Jue Mar 27 12:50:31 CET 2014


Holaa todos el dia de hoy vengo con una duda sobre vectores en 3D ,
bueno pues voy a copiar el programa comleto y despues les hare las
preguntas especificas sobre el problema que tengo a ver si ustedes
pueden ayudarme:

El programa:
-----------------------------------------------------------------------------------------------------------------------------
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// Pour simplifier
typedef string Forme   ;
typedef string Couleur ;

class Brique
{
private:
  Forme   forme   ;
  Couleur couleur ;

public:
  /*****************************************************
    Compléter le code à partir d'ici
  *******************************************************/
Brique (Forme a, Couleur b):forme(a),couleur(b){}
Forme get_forme()const{return forme;}
Couleur get_couleur() const{return couleur;}

ostream& afficher(ostream& sortie) const
{
    sortie<<"( "<<forme<<" , "<<couleur<<" )"<<endl;
    return sortie;
    }
};

ostream& operator <<(ostream& sortie , Brique const & val)
{
return val.afficher(sortie);
}

class Construction
{
friend class Grader;
private:
vector<vector<vector<Brique>>> contenu;
public:
Construction (Brique a);

unsigned int get_contenu_size()const{return contenu.size();}
unsigned int get_contenu_size(int i)const{return contenu[i].size();}
unsigned int get_contenu_size(int i, int j)const{return contenu[i][j].size();}
Brique get_contenu(int i=0, int j=0, int k=0)const{return contenu[i][j][k];}

vector<vector<vector<Brique>>> get_contenuVect()const{return contenu;}

ostream& afficher(ostream& ) const;

void operator +=(Construction const & a);

};
ostream& operator <<(ostream& sortie , Construction const & tmp)
{
      return tmp.afficher(sortie);
}
ostream& Construction::afficher(ostream& os) const
{
    unsigned int i(0),j(0),k(0);
     if (contenu.empty())
         return os;
     else
     {
        for(i =0; i<contenu.size();i++){
            os << "Couche " << i << endl;
             for(j = 0 ;j<contenu[i].size();j++){
               for(k = 0;k<contenu[i][j].size();k++){
                      os<< contenu[i][j][k];
                }
                }
                }

             return os;
    }

 }

void Construction::operator +=(Construction const &a)
{

     for(unsigned int j =0; j< a.contenu.size() ; j++){

     for(unsigned int k=0; k < a.contenu[j].size(); k++) {

                 contenu[k].push_back(a.contenu[j][k]);

                                               }
                                           }

  }

const Construction operator+(Construction a,Construction const& b)
{
a+=b;
return a;
}
/**
const Construction operator*(unsigned int n, Construction const& a)
{

return a;
}

const Construction operator/(unsigned int n, Construction const& a)
{
}

const Construction operator%(unsigned int n, Construction const& a)
{
}
*/
Construction::Construction(Brique a):contenu (1, vector < vector <
Brique > > (1,vector<Brique> (1, a))) {}
/*******************************************
 * Ne rien modifier après cette ligne.
 *******************************************/

int main()
{
  // Modèles de briques
  Brique toitD("obliqueD", "rouge");
  Brique toitG("obliqueG", "rouge");
  Brique toitM(" pleine ", "rouge");
  Brique mur  (" pleine ", "blanc");
  Brique vide ("                 ", "");


  /**unsigned int largeur(4);
  unsigned int profondeur(3);
  unsigned int hauteur(3); // sans le toit
*/
  // on construit les murs

  Construction maison(mur+mur+mur);
  Construction maison2(mur);
  //cout<<maison;
  cout<<maison ;

  //Construction maison( hauteur / ( profondeur % (largeur * mur) ) );
/**
  // on construit le toit
  Construction toit(profondeur % ( toitG + 2*toitM + toitD ));
  toit ^= profondeur % (vide + toitG + toitD);

  // on pose le toit sur les murs
  maison ^= toit;

  // on admire notre construction
  cout << maison << endl;
*/
  return 0;
}
-----------------------------------------------------------------------------------------------------------------------------------

DUDAS:

En realidad de este programa lo queno entiendo , por ahora escomo
hacer para manejar el vector de 3 dimensiones.

Digamos que i , j k sonlas dimensiones , pero no he podido dar con el
buen resultado del operador +

si ven en el main , envio una clase Construction asi:

Construction maison(mur+mur+mur);
cout<<maison ;

Al ejecutar este codigo obtengo:

Couche 0
(  pleine  , blanc )
(  pleine  , blanc )
(  pleine  , blanc )


Cosa que esta mal , por que deberia obtener segun lo que me piden es
lo siguiente:


Couche 0
(  pleine  , blanc ) (  pleine  , blanc ) (  pleine  , blanc )

Y no he podido lograrlo. Se que el error es que estoy recorriendo el
vector en i y deberia recorrerlo en k , pero ya he hecho diferentes
cambios y bien sea obtengo solo:
Couche 0
(  pleine  , blanc )

O un error de segmentation fault.  La verdad llevo ya mucho tiempo con
este ejercicio y estoy bloqueado , me gustaria saber si alguien puede
ayudarme con los bucles de la funcion affcher() y con el operador +=
ya que es ahi donde radica el problema alqueme enfrento en este
momento.

Gracias por su ayuda quedo atento a sus comentarios




-- 
MIGUEL ALEJANDRO JIMENEZ R.




Más información sobre la lista de distribución Cconclase