vector::reserve() function with example in C++ STL

C++ STL vector::reserve() function: Here, we are going to learn about the reserve() function of vector header in C++ STL with example.
Submitted by Radib Kar, on May 17, 2019

C++ vector::reserve() function

vector::reserve() is a library function of "vector" header, which is used to request change in vector allocation. Refer to example to understand in details.

Note: To use vector, include <vector> header.

Syntax of vector::reserve() function

    vector::reserve(n);

Parameter(s): int n – It accepts n as a parameter where n be the input capacity.

Return value: void – It returns nothing in case of valid request. But if the capacity requested is greater than the maximum size of the vector (vector::max_size), a length_error exception is thrown.

Example: Case 1: (without reserve())

vector<int> arr1; //usual dynamic allocation
size = arr1.capacity();
cout << "arr1 growing with usual dynamic allocation:\n";
for (int i = 0; i < 50; ++i) {
    arr1.push_back(i);
    if (size != arr1.capacity()) {
        size = arr1.capacity();
        cout << "capacity changed to : " << size << '\n';
    }
}

In this case, we have not used reserve thus the growth is as per dynamic allocation, which increases in a factor of two. Like, 1, 2, 4, 8, 16, 32, 64, 128…..so on till max_size.

Example: Case 2: (with reserve())

vector<int> arr2; //using reserve
size = arr2.capacity();
arr2.reserve(50); // use of reserve function
cout << "arr2 growing with using reverse:\n";
for (int i = 0; i < 50; ++i) {
    arr2.push_back(i);
    if (size != arr2.capacity()) {
        size = arr2.capacity();
        cout << "capacity changed to: " << size << '\n';
    }
}

In this case, we have not used reserve thus the growth is as per dynamic allocation, which increases in a factor of two. Like, 1, 2, 4, 8, 16, 32, 64, 128…..so on till max_size.

C++ program to demonstrate example of vector::reserve() function

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int>::size_type size;

    vector<int> arr1; //usual dynamic allocation
    size = arr1.capacity();
    cout << "arr1 growing with usual dynamic allocation:\n";
    for (int i = 0; i < 50; ++i) {
        arr1.push_back(i);
        if (size != arr1.capacity()) {
            size = arr1.capacity();
            cout << "capacity changed to : " << size << '\n';
        }
    }

    vector<int> arr2; //using reserve
    size = arr2.capacity();
    arr2.reserve(50); // use of reserve function
    cout << "arr2 growing with using reverse:\n";
    for (int i = 0; i < 50; ++i) {
        arr2.push_back(i);
        if (size != arr2.capacity()) {
            size = arr2.capacity();
            cout << "capacity changed to: " << size << '\n';
        }
    }

    return 0;
}

Output

arr1 growing with usual dynamic allocation:
capacity changed to : 1
capacity changed to : 2
capacity changed to : 4
capacity changed to : 8
capacity changed to : 16
capacity changed to : 32
capacity changed to : 64
arr2 growing with using reverse:
capacity changed to: 50

Reference: C++ vector::reserve()


Related Tutorials



Comments and Discussions!

Load comments ↻





Copyright © 2024 www.includehelp.com. All rights reserved.