Re: size vs. capacity in a container, such as vector
On Oct 12, 10:08 am, Juha Nieminen <nos...@thanks.invalid> wrote:
puzzlecracker wrote:
Say I have a vector<int> intVec, and I reserve some sapce
intVec.reserve(100);
Is it fair to assume the vector contains enough space for
100 elements. In which case, the capacity -- ability to
store 100 elements without a relocation -- is 100.
Then what is the difference for intVec.resize(100)?
The difference is that, among other things, the new elements
will *not* be initialized with reserve(), and the push_back()
and at() functions will behave differently. Accessing elements
beyond size() with operator[] (even if space has been reserved
for those elements) is probably undefined behavior, especially
if the element type is a class which requires initialization.
There's no probably...especially about it. It's undefined
behavior (except for at(), which is guaranteed to throw). In
any good implementation, something like
int
main()
{
std::vector< int > v ;
v.reserve( 100 ) ;
v[ 50 ] ;
return 0 ;
}
will result in a runtime error (core dump under Unix).
More generally, there are two main uses of reserve(): to ensure
the validity of iterators and pointers to elements, and as an
optimization measure. It doesn't affect the logical state of
the container.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34