STL : se débarrasser des tableaux issus du C - C++ - Programmation
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.
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? |
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...)
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...
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!
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 !
Marsh Posté le 29-01-2004 à 11:14:41
ben pour stl t'toujours un joli constructeur
template<InpputIterator>
Conteneur(InputIterator first, ImputIterator last)
Marsh Posté le 29-01-2004 à 11:30:29
taz a écrit : ben pour stl t'toujours un joli constructeur |
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... :-(
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));
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.
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
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 :
|
Mais nulle part je ne vois de méthode first appartenant à Sequence. Je comprends pas !
Autre chose : "Sequence" est purement virtuelle, non ?
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
Marsh Posté le 29-01-2004 à 12:18:13
taz a écrit : c'est plutot |
ça change pas grand chose à mon PB, à savoir : qu'est ce qui nous fait dire que "a" dispose d'une méthode "begin" ?
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
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 |
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 ?
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 ?
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
Marsh Posté le 29-01-2004 à 12:26:42
el_gringo a écrit : |
http://www.sgi.com/tech/stl/Container.html
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.
Marsh Posté le 29-01-2004 à 12:29:13
taz a écrit : dans ton combat, n'oublie pas les char* |
Pardon !???
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.
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 !