C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

vector et iterator

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Jeremie Fouche
Guest





PostPosted: Tue Jun 29, 2004 11:45 am    Post subject: vector et iterator Reply with quote



Bonjour

Comment peut on utiliser les iterators des vectors, car je suis confronté un
petit problème :
Reserver une taille pour un vector ne met pas a jour les iterators begin()
et end() !
C'est dommage car j'allouai l'espace nécéssaire avec reserve()..

#include <iostream>
#include <vector>
using namespace std;

typedef vector<int> vectInt;

int main(void)
{
vectInt v;
v.reserve(10);
cout << "capacity : " << v.capacity() << endl;
if (v.begin() == v.end())
{
cout << "begin == end !" << endl;
}
else
{
cout << "begin != end !" << endl;
}
return 0;
}

Merci pour vos réponses

--
Jérémie

Back to top
Christophe de VIENNE
Guest





PostPosted: Tue Jun 29, 2004 12:14 pm    Post subject: Re: vector et iterator Reply with quote



Jeremie Fouche wrote:
Quote:
Bonjour

Comment peut on utiliser les iterators des vectors, car je suis confronté un
petit problème :
Reserver une taille pour un vector ne met pas a jour les iterators begin()
et end() !
C'est dommage car j'allouai l'espace nécéssaire avec reserve()..

Attention, il ne faut pas confondre reserve et resize :
reserve pré-alloue un espace mémoire, mais n'ajoute aucun élément, au
contraire de resize.
Quand à capacity, il donne la quantité de mémoire alloué, ou plus
exactement la taille que peut atteindre le vecteur sans qu'une
réallocation ne soit nécéssaire. A ne pas confondre avec size().

Le comportement mis en évidence dans ton exemple est tout à fait normal.

A+

Christophe

--
Christophe de Vienne

Back to top
Luc Hermitte
Guest





PostPosted: Tue Jun 29, 2004 12:24 pm    Post subject: Re: vector et iterator Reply with quote



Bonjour,

"Jeremie Fouche" <jeremie.fouche.tonmasque (AT) tiscali (DOT) fr> wrote in
news:cbrl1l$sdt$1 (AT) news (DOT) tiscali.fr:

Quote:
Comment peut on utiliser les iterators des vectors, car je suis
confronté un petit problème :
Reserver une taille pour un vector ne met pas a jour les iterators
begin() et end() !

Si. Si la capacité du buffer interne était insuffisante, celui-ci et
agrandi et tous les itérateurs précédemment issus du vecteur sont
invalidés. Entre autres, begin() et end() sont modifiés -- ce qui ne les
empêche pas d'être égaux.

Quote:
C'est dommage car j'allouai l'espace nécéssaire avec reserve()..

reserve() réserve de la mémoire qui sera utilisée par le vecteur par la
suite. C'est de l'optimisation qui permet d'éviter de redimensionner trop
souvent le buffer utilisé en interne. Convient bien à l'utilisation de
push_back()

resize() redimensionne le vecteur. Pas vraiment "compatible" avec
push_back(). Plutôt orienté pour les manipulations avec l'opérateur [].

--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.