Rechercher : dans
Par :

[c++] aide utilisation STL

Dernière réponse le 20 sep 2006 à 08:33:32 Anais93, le 16 sep 2006 à 15:16:46 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « [c++] aide utilisation STL » dans :
Introduction à la STL en C++ (standard template library) Voir Introduction Principales classes de la STL std::pair std::list std::vector std::set std::map Les iterators iterator et const_iterator reverse_iterator et const_reverse_iterator Les algorithmes ...
[Windows] Impossible de supprimer un fichier ou un dossier VoirSi Windows n'arrive pas à supprimer un fichier ou un dossier, la cause peut être l'une des suivantes : Le fichier ou le dossier à supprimer est utilisé par un processus du système Le dossier à supprimer contient des fichiers ou dossiers cachés ...
VirtualBox - Sauvegarder ses disques durs virtuels VoirLes disques durs de vos machines virtuelles se trouvent, par défaut, dans le chemin suivant : Sous Vista-Sept ---> C:\utilisateurs\nom_d'utilisateur\.VirtualBox\HardDisks Sous Xp ---> C:\Documents and...
Guide d'utilisation du Shell pour débutant VoirSHELL BASH - GUIDE D'UTILISATION - Niveau Débutant Introduction Appel aux membres CCM II. C'est quoi le shell ? III. Comment accéder à la ligne de commande IV. Les consoles virtuelles Exemple : Accéder à la console 3 depuis l'interface...
Télécharger Visual C++ Express VoirVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C.
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Les structures en langage C++ VoirDifférence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...
Langage C - Les listes chaînées VoirLa notion de structure autoréferrentielle Une structure autoréferrentielle (parfois appelée structure récursive) correspond à une structure dont au moins un des champs contient un pointeur vers une structure de même type. De cette façon on crée...

1

crabs, le 16 sep 2006 à 17:58:28

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
..., I think Slackware sounds better than 'Microsoft,'
-- Patrick Volkerding - founder and maintainer of Slackware

Répondre à crabs

2

mamiemando, le 20 sep 2006 à 01:18:01
  • +1

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

Répondre à mamiemando

3

 Char Snipeur, le 20 sep 2006 à 08:33:32

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. Salutation !
Char Snipeur

Répondre à Char Snipeur