By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,847 Members | 2,206 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,847 IT Pros & Developers. It's quick & easy.

reserve() in vector?

P: n/a
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?

Oct 3 '06 #1
Share this Question
Share on Google+
3 Replies


P: n/a
we*****@yahoo.com wrote:
I like to preallocate a vector of an element X, my question is after
calling reserve(), is there a guarantee that memory is contiguous?
Yes.

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Oct 3 '06 #2

P: n/a
Victor Bazarov wrote:
we*****@yahoo.com wrote:
>I like to preallocate a vector of an element X, my question is after
calling reserve(), is there a guarantee that memory is contiguous?

Yes.
Specifically 23.2.4/1 (ISO/IEC 14882:2003).

"The elements of a vector are stored contiguously, meaning that if v is
a vector<T, Allocatorwhere T is some type other than bool, then it
obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size()."
Oct 3 '06 #3

P: n/a
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

Oct 4 '06 #4

This discussion thread is closed

Replies have been disabled for this discussion.