Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1366 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  STL : se débarrasser des tableaux issus du C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

STL : se débarrasser des tableaux issus du C

n°624598
El_gringo
Posté le 29-01-2004 à 10:23:25  profilanswer
 

Le tableau tels qu'ils sont en C ne sont vraiment pas sécurisés, un débordement mémoire est vraiment vite fait. Je voudrais savoir si dans la STL il existe une classe la plus simple possible, qui prendrait 2 arguments de constructeur : un pointeur vers un tableau, et la taille du tableau pointé, pour encapsuler ce dernier, et s'affranchir de la gestion de ces tableaux.
Merci.


---------------
Les Vers Solitaires, on aime ... ou pas !
mood
Publicité
Posté le 29-01-2004 à 10:23:25  profilanswer
 

n°624604
SoWhatIn22
Posté le 29-01-2004 à 10:26:36  profilanswer
 

si tu demandes ça, c'est que tu es obligé de garder ton tableau en C, c'est bien cela?
Dans le cas contraire, std::vector va plutôt bien.

n°624606
El_gringo
Posté le 29-01-2004 à 10:31:45  profilanswer
 

SoWhatIn22 a écrit :

si tu demandes ça, c'est que tu es obligé de garder ton tableau en C, c'est bien cela?
Dans le cas contraire, std::vector va plutôt bien.


 
Disons qu'à la base j'ai mon tableau en C,oui. Je pars d'une vieille appli C. Mais, "vector", je peux lui passer nu tableau C pour l'initialiser ? (faire sois même l'itération, c'est pas compliqué, mais bon...)


---------------
Les Vers Solitaires, on aime ... ou pas !
n°624609
El_gringo
Posté le 29-01-2004 à 10:34:07  profilanswer
 

Mais vecotr, ça conserve pas le tableau en mémoire, si ? Moi je voudrais juste une classe qui encapsule un bête tableau C. Gener qui permettrait juste d'accèder à tel ou tel élément (en balançant une exception si l'index demandé est hors tableau), d'itérer les éléments, réallouer le tableau, etc...


---------------
Les Vers Solitaires, on aime ... ou pas !
n°624615
SoWhatIn22
Posté le 29-01-2004 à 10:37:46  profilanswer
 

c'est exactement ce que fait la class vector.
Par contre, pour l'init, je ne sais pas.
 
edit: pour l'init, peut être avec std::merge pour faire simple
(cf l'exemple de insert_iterator de la doc de sl STL SGI : http://www.sgi.com/tech/stl/insert_iterator.html )
 
edit2: non, j'ai dit une betise pour l'init avec merge et insert_iterator. on oublie!


Message édité par SoWhatIn22 le 29-01-2004 à 11:09:36
n°624641
El_gringo
Posté le 29-01-2004 à 11:00:04  profilanswer
 

pour faire, pour faire simple. ça me parait un peu compliqué par rapport à la simplicité de ce que je veux faire.
 
EDIT : merci quand même !


Message édité par El_gringo le 29-01-2004 à 11:00:23

---------------
Les Vers Solitaires, on aime ... ou pas !
n°624645
Taz
bisounours-codeur
Posté le 29-01-2004 à 11:06:40  profilanswer
 

pas de problème avec l'init

n°624650
SoWhatIn22
Posté le 29-01-2004 à 11:10:03  profilanswer
 

taz> comment tu ferais ça?

n°624656
Taz
bisounours-codeur
Posté le 29-01-2004 à 11:14:41  profilanswer
 

ben pour stl t'toujours un joli constructeur
 
template<InpputIterator>
Conteneur(InputIterator first, ImputIterator last)

n°624668
SoWhatIn22
Posté le 29-01-2004 à 11:24:48  profilanswer
 

c'est vrai. Autant pour moi.

mood
Publicité
Posté le 29-01-2004 à 11:24:48  profilanswer
 

n°624672
El_gringo
Posté le 29-01-2004 à 11:30:29  profilanswer
 

taz a écrit :

ben pour stl t'toujours un joli constructeur
 
template<InpputIterator>
Conteneur(InputIterator first, ImputIterator last)


 
J'me paume dans la stl (j'y ai quasi jamais touché) :-(
J'ai l'habitude de la Javadoc, alors là, j'peux vous dire que c'est pas pareil la doc de sgi !
taz, s'te plais, tu veux pas me mettre un tout petit exemple, j'comprend pas pour l'init... :-(


---------------
Les Vers Solitaires, on aime ... ou pas !
n°624687
Taz
bisounours-codeur
Posté le 29-01-2004 à 11:36:07  profilanswer
 

Sequence(tableau, tableau + sizeof tableau / sizeof tableau[0])  
 
ou si vous avait sous la main les fonctions size pour tableau (montrée ici) ou d'autre begin et end
 
Sequence(tableau, tableau+size(tableau))
Sequence(begin(tableau), end(tableau));

n°624712
El_gringo
Posté le 29-01-2004 à 11:49:30  profilanswer
 

...et vector est une "Sequence", et implémente donc ce constructeur. OK. Génial. Merci beaucoup.


---------------
Les Vers Solitaires, on aime ... ou pas !
n°624721
Taz
bisounours-codeur
Posté le 29-01-2004 à 12:00:40  profilanswer
 

c'est ce meme constructeur qui te permet de construire une Sequence à partir d'un autre

n°624738
El_gringo
Posté le 29-01-2004 à 12:11:26  profilanswer
 

Merci. Et, à propos, autre chose (rien d'essentiel pour mon pb, mais j'voudrais comprendre) :
dans la doc, à la page décrivant Sequence (http://www.sgi.com/tech/stl/Sequence.html), un truve les choses suivantes. Du moins j'ai cru comprendre les choses suivantes :


X est un type implémentant Sequence
a est une instance de type X
la méthode a.front() et équivalente à *(a.first())


Mais nulle part je ne vois de méthode first appartenant à Sequence. Je comprends pas !
 
Autre chose : "Sequence" est purement virtuelle, non ?


---------------
Les Vers Solitaires, on aime ... ou pas !
n°624739
Taz
bisounours-codeur
Posté le 29-01-2004 à 12:13:39  profilanswer
 

et non on est pas en Java avec ses kilomètres d'interface, ici on fait de la virtualité template. donc Sequence est une pure vue de l'esprit :sol:

n°624740
Taz
bisounours-codeur
Posté le 29-01-2004 à 12:14:14  profilanswer
 

c'est plutot
 
a.front() <-> *(a.begin())

n°624747
El_gringo
Posté le 29-01-2004 à 12:18:13  profilanswer
 

taz a écrit :

c'est plutot
 
a.front() <-> *(a.begin())


 
ça change pas grand chose à mon PB, à savoir : qu'est ce qui nous fait dire que "a" dispose d'une méthode "begin" ?


---------------
Les Vers Solitaires, on aime ... ou pas !
n°624751
Taz
bisounours-codeur
Posté le 29-01-2004 à 12:20:00  profilanswer
 

la documentation, la spécification de STL qui dit que tout les conteneurs ont une interface commune


Message édité par Taz le 29-01-2004 à 12:20:30
n°624753
El_gringo
Posté le 29-01-2004 à 12:20:45  profilanswer
 

taz a écrit :

et non on est pas en Java avec ses kilomètres d'interface, ici on fait de la virtualité template. donc Sequence est une pure vue de l'esprit :sol:


 
c'est une vue de l'esprit !???
mais c'est crado ça. ça veut dire que rien n'emplémente réellement Sequence, qu'il faut simplement penser par soit même à implémenter les méthode qu'une Sequence est censée contenir si on veut en faire une (de Sequence). Pourquoi ne pas avoir faire une classe purement virtuelle, histoire de déléguer cette sale tâche au compilateur plutôt qu'au développeur ?


---------------
Les Vers Solitaires, on aime ... ou pas !
n°624757
El_gringo
Posté le 29-01-2004 à 12:21:41  profilanswer
 

taz a écrit :

la documentation, la spécification de STL qui dit que tout les conteneurs ont une interface commune


 
interface inexistante encore une fois. Encore une vue de l'esprit, c'est ça ? :pt1cable:


---------------
Les Vers Solitaires, on aime ... ou pas !
n°624769
Taz
bisounours-codeur
Posté le 29-01-2004 à 12:24:21  profilanswer
 

parce qu'on fait du template, avec tout ce que ça implique, et on a pas trop envie de se taper des mécanismes virtuels là ou on peut avoir de l'inline. STL est faite pour être simple et efficace. De toutes façons les templates foutent en l'air tes certitudes Java, puisque lors de l'instanciation, il faut faire une vérification de qui à quoi, qui répond bine à telle interface. cette vérification de concept se fait toute seule (si le code passe, c'est bon), ou manuellement (ou avec des outils)
 
comprends bien que la virtualité ici ne sert à rien et ne résout aucun problème

n°624776
Kristoph
Posté le 29-01-2004 à 12:26:42  profilanswer
 

el_gringo a écrit :


 
ça change pas grand chose à mon PB, à savoir : qu'est ce qui nous fait dire que "a" dispose d'une méthode "begin" ?


 
http://www.sgi.com/tech/stl/Container.html

n°624780
Taz
bisounours-codeur
Posté le 29-01-2004 à 12:28:12  profilanswer
 

dans ton combat, n'oublie pas les char*

n°624782
El_gringo
Posté le 29-01-2004 à 12:28:43  profilanswer
 

En fait je connais vraiment pas assez les tamplates pour réellement suivre ce que tu dis. Ce que je connais des templates, c'est simplement la généricité que ça apporte. Ce qui va être ajouté à Java bientôt quoi.
Quand même, merci beaucoup pour ton aide.


---------------
Les Vers Solitaires, on aime ... ou pas !
n°624785
El_gringo
Posté le 29-01-2004 à 12:29:13  profilanswer
 

taz a écrit :

dans ton combat, n'oublie pas les char*


 
Pardon !???


---------------
Les Vers Solitaires, on aime ... ou pas !
n°624788
El_gringo
Posté le 29-01-2004 à 12:30:07  profilanswer
 

Ha, en fait le composants de type "Concept" portent bien leurs nons. Ils ne sont pas plus. Pas de trace dans les sources. ok.


---------------
Les Vers Solitaires, on aime ... ou pas !
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  STL : se débarrasser des tableaux issus du C

 

Sujets relatifs
Problème tri d'une liste objet (STL)STL : gestion des exception. appel explicite?
[HTML] Site et Tableaux[C++/STL] Retrait d'un élément dans une list
[C++] liste chainée de struct avec la STLpostgres, tableaux
Mini défi PHP pour ceux qui maitrisent bien les tableaux[C] tableaux à 2 dimensions et memcpy
STL : MultimapTri un tableau de tableaux ?
Plus de sujets relatifs à : STL : se débarrasser des tableaux issus du C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR