[c++] aide utilisation STL

Fermé
Anais93 Messages postés 1 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 16 septembre 2006 - 16 sept. 2006 à 15:16
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 20 sept. 2006 à 08:33
Bonjour.
Je programme depuis plusieurs moi en C++ (enfin j'apprend ^^').
Et donc en ce moment j'essaye d'utiliser la classe vector.
Puisqu'on m'a dis que c'etais tres pratique pour gerer les allocation dynamique de mémoire.
J'avais concue une classe UnPixel et maintenant j'aimerais rajouter au constructeur un tableau qui stocke le X et le Y de chaque pixel (tableau a une dimension).
Mais voila je bloque sur une erreur je n'arrive pas a declarer la taille de mon tableau.

voici mon .cpp avec mon constructeur:
UnPixel::UnPixel(unsigned int telX,unsigned int telY,std::vector<unsigned> telPixel):leX(telX),leY(telY),telPixel(telX*telY) {
}//constructeur

l'erreur est:l'initialisation des constructeurs est uniquement permise dans la definition du constructeur.

Merci d'avance

3 réponses

mamiemando Messages postés 33392 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 7 803
20 sept. 2006 à 01:18
Tu peux définir une classe pour tes pixels, ou simplement utiliser les paires de la STL. Pour stocker tes pixels tu peux utiliser différents containers :
std::vector : recherche en O(n), accès en O(1)
std::list : recherche en O(n), accès en O(n)
std::set : recherche en O(log(n)), accès en O(log(n))

Ci dessous un exemple avec utilisation des flux ( opérateur <<), des iterators, bref ça me semble pas mal pour commencer ;-)

#include <set>
#include <iostream>

typedef unsigned int coord_t;

class pixel_t{
  protected:
  coord_t x;
  coord_t y;
  // par exemple ici tu peux rajouter 
  // quelque chose pour enregistrer la couleur
  // du pixel

  public:

  pixel_t(const coord_t & x0=0,const coord_t & y0=0):x(x0),y(y0){}

  inline const coord_t & get_x() const{
    return x;
  }

  inline const coord_t & get_y() const{
    return y;
  }

  inline void set_x(const coord_t & x0) const{
    x = x0;
  }

  inline void set_y(const coord_t & y0) const{
    y = y0;
  }
};

int main(){
  // Creer des pixels
  pixel_t  p1(1,2),p2(1,3),p3(5,3);

  // Les sauver dans un ensemble
  std::set<pixel_t> mes_pixels;
  mes_pixels.insert(p1);
  mes_pixels.insert(p2);
  mes_pixels.insert(p3);

  // Afficher la collection de pixels
  {
    std::set<pixel_t>::const_iterator 
      sit(mes_pixels.begin()),
      send(mes_pixels.end());
    for(;sit!=send;++sit){ // pour chaque pixel
      const pixel_t & p = *sit; // le pixel courant
      std::cout << '(' << p.get_x() << ',' << p.get_y() << ')' << std::endl;
    }
  }
  return 0;
}


Bonne chance
1
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 507
16 sept. 2006 à 17:58
Salut,

Ton tableau ne stocke pas les X et les Y mais semble contenir le produit du X et du Y.

Si tu veux qu'à la "contruction" d'un pixel il soit contenu dans un vecteur,
passe la référence à ce conteneur.
Ensuite dans le code du constructeur, tu n'aura plus qu'à ajouter l'objet courant
(ou du moins une copie) dans le conteneur dont tu as passé la référence.

A+, crabs
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
20 sept. 2006 à 08:33
Salut.
Peut être ceci fonctionnerai:
UnPixel::UnPixel(unsigned int telX,unsigned int telY,std::vector<unsigned> telPixel):leX(telX),leY(telY),telPixel(std::vector<unsigned>(telX*telY)) {
}//constructeur
J'ai l'impression que l'erreur te dit que cette initialisation devrai être dans le corps de la class.
0