we*****@yahoo.com wrote:
hi,
I like to preallocate a vector of an element X, my question is after
calling reserve(), is there a guarantee that memory is contiguous?
As others have said, the memory is guaranteed to be contiguous.
However, from the wording of your question it sounds like you may
misinterpret the intent of the reserve function. Are you trying to do
something like this?
void some_library_function(char * p, size_t len)
{
// Write to p.
}
int main()
{
std::vector<charv ;
v.reserve(100) ;
some_library_function(&v[0], 100) ; // ERROR!!
}
Calling reserve will allocate enough memory to hold the specified
number of objects, but it doesn't give you access to that memory. That
is, after a call to reserve, the vector still contains the same number
of elements as before to call to reserve. If your intent is to do
something like the above, use resize instead of reserve.
--
Alan Johnson