 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Jeremie Fouche Guest
|
Posted: Tue Jun 29, 2004 11:45 am Post subject: vector et iterator |
|
|
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
|
Posted: Tue Jun 29, 2004 12:14 pm Post subject: Re: vector et iterator |
|
|
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
|
Posted: Tue Jun 29, 2004 12:24 pm Post subject: Re: vector et iterator |
|
|
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 |
|
 |
|
|
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
|
|