 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Gib Guest
|
Posted: Mon May 24, 2004 10:36 am Post subject: STL : vector |
|
|
Bonjour
vector <int>v ;
v.insert(v.begin().1) // Ici j'insère 1 en dans la première case de v
vector <int>::iterator itl ;
itl=v.begin() : itl++;
v.insert (itl,2) /* Est ce que ici j'insére 2 dans la case
pointé par itl ou avant la case pointé par itl ???????
J'insére dans la 1er case ou la 2nd case
de v ????
Merci
|
|
| Back to top |
|
 |
Patrick Mézard Guest
|
Posted: Mon May 24, 2004 10:51 am Post subject: Re: STL : vector |
|
|
Gib wrote:
| Quote: | Bonjour
vector <int>v ;
v.insert(v.begin().1) // Ici j'insère 1 en dans la première case de v
|
Tu peux aussi écrire :
v.push_back(1)
| Quote: | vector <int>::iterator itl ;
itl=v.begin() : itl++;
|
std::vector<> est un conteneur à accès aléatoire, tu peux écrire plus
simplement :
vector<int>::iterator itl = v.begin()+1;
Note que dans ton cas itl==v.end()
| Quote: | v.insert (itl,2) /* Est ce que ici j'insére 2 dans la case
pointé par itl ou avant la case pointé par itl ???????
J'insére dans la 1er case ou la 2nd case
de v ????
|
http://www.sgi.com/tech/stl/Sequence.html :
"
a.insert(p, t) : A copy of t is inserted before p. [2] [3]
[2] Note that p equal to a.begin() means to insert something at the
beginning of a (that is, before any elements already in a), and p equal
to a.end() means to append something to the end of a.
"
Donc tu insères ton élément en fin de séquence. Attention, itl n'est
plus valide après l'insertion.
Patrick Mézard
|
|
| Back to top |
|
 |
Gib Guest
|
Posted: Mon May 24, 2004 12:12 pm Post subject: Re: STL : vector |
|
|
Patrick Mézard wrote:
| Quote: | Tu peux aussi écrire :
v.push_back(1)
|
Je n'ai pas remarqué qu'il existait aussi ses méthodes pour vector, pensant
que c'etait uniquement pour list....
Merci de me l'avoir montré !
Ok j'ai compris le fonctionne de "insert" :-)
Merci
Gib
|
|
| Back to top |
|
 |
Alexandre BACQUART Guest
|
Posted: Mon May 24, 2004 9:26 pm Post subject: Re: STL : vector |
|
|
Gib wrote:
| Quote: | Patrick Mézard wrote:
Tu peux aussi écrire :
v.push_back(1)
Je n'ai pas remarqué qu'il existait aussi ses méthodes pour vector, pensant
que c'etait uniquement pour list....
Merci de me l'avoir montré !
|
C'est souvent le cas, un des avantages étant de passer de vector à list
ou je ne sais quoi en ne changeant que la déclaration.
--
Tek
|
|
| Back to top |
|
 |
Antonio DA SILVA Guest
|
Posted: Wed Jun 02, 2004 9:25 am Post subject: Re: STL : vector |
|
|
| Quote: | Je n'ai pas remarqué qu'il existait aussi ses méthodes pour vector,
pensant
que c'etait uniquement pour list....
Merci de me l'avoir montré !
C'est souvent le cas, un des avantages étant de passer de vector à list
ou je ne sais quoi en ne changeant que la déclaration.
|
En effet, le passage de list à vector et réciproquement est aisé. Un autre
conteneur, qui gangnerait à être connu, est le deque, il regroupe en gros
les interfaces de vector et list.
On se demande pourquoi avoir "quasi la même chose" avec ces conteneurs.
Et bien il y a des différences fondamentales entre le vector et la list.
Dans un vector, la mémoire est "consécutives" (tableau) pour ses éléments,
si une insertion dépasse sa taille, tout est réalloué. Pour la liste,
il y juste insertion d'un nouveau maillon (liste chainée) créé n'importe où
en
mémoire.
vector ==> faible coût mémoire mais réallocations couteûses,
list ==> plus gros coût mémoire mais pas de réallocation.
Par ailleurs, comme la liste se trouve "disséminée" en mémoire,
perte d'optimisation de cache mémoire et pas d'accès direct à un élément.
Pour le vecteur, comme les données sont contigües, performance
d'accès et accès direct à un élément quelconque.
Ces considérations doivent orienter les choix pour tel ou tel container.
A+
|
|
| Back to top |
|
 |
Patrick Mézard Guest
|
Posted: Sun Jun 06, 2004 2:33 pm Post subject: Re: STL : vector |
|
|
Antonio DA SILVA wrote:
| Quote: | Je n'ai pas remarqué qu'il existait aussi ses méthodes pour vector,
pensant
que c'etait uniquement pour list....
Merci de me l'avoir montré !
C'est souvent le cas, un des avantages étant de passer de vector à list
ou je ne sais quoi en ne changeant que la déclaration.
En effet, le passage de list à vector et réciproquement est aisé. Un autre
conteneur, qui gangnerait à être connu, est le deque, il regroupe en gros
les interfaces de vector et list.
On se demande pourquoi avoir "quasi la même chose" avec ces conteneurs.
Et bien il y a des différences fondamentales entre le vector et la list.
Dans un vector, la mémoire est "consécutives" (tableau) pour ses éléments,
si une insertion dépasse sa taille, tout est réalloué. Pour la liste,
il y juste insertion d'un nouveau maillon (liste chainée) créé n'importe où
en
mémoire.
vector ==> faible coût mémoire mais réallocations couteûses,
list ==> plus gros coût mémoire mais pas de réallocation.
|
L'invalidation des itérateurs après telles ou telles operation est aussi
un critère de choix important. Cela permet ou non l'utilisation
conjointe de plusieurs conteneurs, l'un contenant des itérateurs sur des
éléments de l'autre.
Patrick Mézard
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|