vector::reserve | public member function |
void reserve ( size_type n ); |
Request a change in capacity
Requests that the capacity of the allocated storage space for the elements of the vector container be at least enough to hold n elements.
This informs the vector of a planned change in size, which can be either to expand or shrink its storage capacity, although notice that the parameter n informs of a minimum, so the resulting capacity may be any capacity equal or larger than this.
When n supposes an expansion in capacity, a reallocation happens during the call to this function, granting that no further automatic reallocations will happen because of a call to vector::insert or vector::push_back until the vector size surpasses at least n (this preserves the validity of iterators on these calls).
A reallocation invalidates all previously obtained iterators, references and pointers.
In any case, a call to this function never affects the elements contained in the vector, nor the vector size (for that purposes, see vector::resize or vector::erase, which modify the vector size and content).
Parameters
- n
- Minimum amount desired as capacity of allocated storage.
Member type size_type is an unsigned integral type.
Return Value
noneIf the requested size to allocate is greater than the maximum size (vector::max_size) a length_error exception is thrown.
In case of reallocation, this is performed using Allocator::allocate(), which may throw its own exceptions (for the default allocator, bad_alloc is thrown if the allocation request does not succeed).
Example
// vector::reserve #include <iostream> #include <fstream> #include <vector> using namespace std; int main () { vector<int> content; size_t filesize; ifstream file ("test.bin",ios::in|ios::ate|ios::binary); if (file.is_open()) { filesize=file.tellg(); content.reserve(filesize); file.seekg(0); while (!file.eof()) { content.push_back( file.get() ); } // print out content: vector<int>::iterator it; for (it=content.begin() ; it<content.end() ; it++) cout << hex << *it; } return 0; } |
This example reserves enough capacity in a vector of ints to store the content of an entire file, which is then read character by character (each character stored as an element in the vector). By reserving a capacity for the vector of at least the size of the entire file, we avoid all the automatic reallocations that the object content could suffer each time that a new element surpassed the size of its previously allocated storage space.
Complexity
Constant.See also
string::capacity | Return size of allocated storage (public member function) |
string::resize | Resize string (public member function) |
string::max_size | Return maximum size of string (public member function) |