STL : se débarrasser des tableaux issus du C

STL : se débarrasser des tableaux issus du C - C++ - Programmation

Marsh Posté le 29-01-2004 à 10:23:25    

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 !
Reply

Marsh Posté le 29-01-2004 à 10:23:25   

Reply

Marsh Posté le 29-01-2004 à 10:26:36    

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.

Reply

Marsh Posté le 29-01-2004 à 10:31:45    

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 !
Reply

Marsh Posté le 29-01-2004 à 10:34:07    

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 !
Reply

Marsh Posté le 29-01-2004 à 10:37:46    

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
Reply

Marsh Posté le 29-01-2004 à 11:00:04    

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 !
Reply

Marsh Posté le 29-01-2004 à 11:06:40    

pas de problème avec l'init

Reply

Marsh Posté le 29-01-2004 à 11:10:03    

taz> comment tu ferais ça?

Reply

Marsh Posté le 29-01-2004 à 11:14:41    

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

Reply

Marsh Posté le 29-01-2004 à 11:24:48    

c'est vrai. Autant pour moi.

Reply

Marsh Posté le 29-01-2004 à 11:24:48   

Reply

Marsh Posté le 29-01-2004 à 11:30:29    

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 !
Reply

Marsh Posté le 29-01-2004 à 11:36:07    

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));

Reply

Marsh Posté le 29-01-2004 à 11:49:30    

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


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 29-01-2004 à 12:00:40    

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

Reply

Marsh Posté le 29-01-2004 à 12:11:26    

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 !
Reply

Marsh Posté le 29-01-2004 à 12:13:39    

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:

Reply

Marsh Posté le 29-01-2004 à 12:14:14    

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

Reply

Marsh Posté le 29-01-2004 à 12:18:13    

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 !
Reply

Marsh Posté le 29-01-2004 à 12:20:00    

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
Reply

Marsh Posté le 29-01-2004 à 12:20:45    

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 !
Reply

Marsh Posté le 29-01-2004 à 12:21:41    

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 !
Reply

Marsh Posté le 29-01-2004 à 12:24:21    

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

Reply

Marsh Posté le 29-01-2004 à 12:26:42    

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

Reply

Marsh Posté le 29-01-2004 à 12:28:12    

dans ton combat, n'oublie pas les char*

Reply

Marsh Posté le 29-01-2004 à 12:28:43    

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 !
Reply

Marsh Posté le 29-01-2004 à 12:29:13    

taz a écrit :

dans ton combat, n'oublie pas les char*


 
Pardon !???


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 29-01-2004 à 12:30:07    

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 !
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed