A Vectors in C++ is an array-like container that can change dynamically in size. Being a part of the C++ STL, a Vector can support various dynamic array operations.
Overview of Vectors in C++
Vectors, being similar to arrays, are stored in contiguous memory locations. This means that the access time is very quick.
Vectors use a dynamically allocated array, which means that it must be reallocated if it ever reaches its limit.
This reallocation operation is a bit expensive, which is the one disadvantage of Vectors.
The below image shows a scenario where the Vector reallocation occurs.
The original vector (<1, 2>
) with a capacity of 2, is now resized dynamically to a capacity of 4 before a third element can be added to the now-empty locations.

Create a Vector in C++
To use this container, we must first include the header file vector
.
#include <vector>
We can now create a new vector using :
std::vector<type> a;
Here, <type>
can refer to any data type, such as int
, float
, char
, etc.
We can also directly assign elements during initialization.
#include <vector>
using namespace std;
vector<int> a = {1, 2, 3, 4};
This will create an integer vector initialized to <1, 2, 3, 4>
. So the first element is 1, and the last element is 4.
Now that we have our vector, let’s look at some of the vector operations involving it.
Vector operations in C++
There are various methods that we can use on the vector container, some of them being:
Iterator Methods
- begin() -> Returns an iterator to the beginning
- end() -> Returns an iterator to the end
- rbegin() -> Returns a reverse iterator to the reverse beginning
- rend() -> Returns a reverse iterator to the reverse end
Here is an example showing the above methods. We cannot directly print a vector using cout
, and must access elements of a vector in a for
loop.
Iterators can be used for this purpose.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> a = {1, 2, 3, 4};
for (auto it = a.begin(); it != a.end(); it++)
cout << *it << " ";
return 0;
}
Output
1 2 3 4
Similarly, we can print the vector in reverse, using rbegin()
and rend()
.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> a = {1, 2, 3, 4};
for (auto it = a.rbegin(); it != a.rend(); it++)
cout << *it << " ";
return 0;
}
Output
4 3 2 1
Capacity methods
- size() -> Returns the size
- max_size() -> Returns the maximum size that can be allocated
- resize(SIZE) -> Resizes the vector to SIZE elements
- capacity() -> Returns the size of the allocated memory capacity
- empty() -> Checks if the vector is empty
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> a = {1, 2, 3, 4, 5, 6};
for (auto it = a.begin(); it != a.end(); it++)
cout << *it << " ";
cout << endl;
cout << "Is the vector empty? " << (a.empty() ? "Yes" : "No") << endl;
cout << "Size: " << a.size() << endl;
cout << "Capacity: " << a.capacity() << endl;
cout << "Maximum Size: " << a.max_size() << endl;
// Let's resize the vector to 4
a.resize(4);
cout << "Vector after resize(): \n";
for (auto it = a.begin(); it != a.end(); it++)
cout << *it << " ";
cout << endl;
return 0;
}
Output
1 2 3 4 5 6
Is the vector empty? No
Size: 6
Capacity: 6
Maximum Size: 2305843009213693951
Vector after resize():
1 2 3 4
Element Access methods
- Using
[]
operator. Same as for arrays. - at(INDEX) -> Access an element at position INDEX
- front() -> Access the first element
- back() -> Access the last element
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> a = {1, 2, 3, 4, 5, 6};
cout << "Access using []:\n";
for (unsigned int i=0; i<a.size(); i++)
cout << a[i] << " ";
cout << endl;
cout << "Access using at():\n";
for (unsigned int i=0; i<a.size(); i++)
cout << a.at(i) << " ";
cout << endl;
cout << "First Element: " << a.front() << endl;
cout << "Last Element: " << a.back() << endl;
return 0;
}
Output
Access using []:
1 2 3 4 5 6
Access using at():
1 2 3 4 5 6
First Element: 1
Last Element: 6
Modifier methods
- push_back() -> Add element at the end
- pop_back() -> Delete the last element
- clear() -> Clear content
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> a = {1, 2, 3, 4, 5, 6};
a.push_back(7);
a.push_back(8);
cout << "vector after push_back():\n";
for(unsigned int i=0; i<a.size(); i++)
cout << a[i] << " ";
cout << endl;
a.pop_back();
cout << "vector after pop_back():\n";
for(unsigned int i=0; i<a.size(); i++)
cout << a[i] << " ";
return 0;
}
As you can see, we do some push and pop operations on the vector to dynamically change the size. This shows the dynamic nature of vectors.
vector after push_back():
1 2 3 4 5 6 7 8
vector after pop_back():
1 2 3 4 5 6 7
References
- cplusplus.com page on Vectors