std::vector shrink_to_fit() method
- since C++20
- since C++11
// Non const version only
constexpr void shrink_to_fit();
// Non const version only
void shrink_to_fit();
Requests the removal of unused capacity.
It is a non-binding request to reduce capacity()
to size()
.
It depends on the implementation whether the request is fulfilled.
If reallocation occurs, all iterators, including the past-the-end iterator, and all references to the elements are invalidated.
If no reallocation takes place, no iterators or references are invalidated.
Parameters
(none)
Type requirements
T
(the container's element type) must meet the requirements ofMoveInsertable
.
Return value
(none)
Complexity
At most linear in the size of the container - O(size()).
Exceptions
If an exception is thrown other than by T
's move constructor, there are no effects (strong exception guarantee).
Example
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v;
std::cout << "Default-constructed capacity is " << v.capacity() << '\n';
v.resize(100);
std::cout << "Capacity of a 100-element vector is " << v.capacity() << '\n';
v.resize(50);
std::cout << "Capacity after resize(50) is " << v.capacity() << '\n';
v.shrink_to_fit();
std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n';
v.clear();
std::cout << "Capacity after clear() is " << v.capacity() << '\n';
v.shrink_to_fit();
std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n';
for (int i = 1000; i < 1300; ++i)
v.push_back(i);
std::cout << "Capacity after adding 300 elements is " << v.capacity() << '\n';
v.shrink_to_fit();
std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n';
}
Default-constructed capacity is 0
Capacity of a 100-element vector is 100
Capacity after resize(50) is 100
Capacity after shrink_to_fit() is 50
Capacity after clear() is 50
Capacity after shrink_to_fit() is 0
Capacity after adding 300 elements is 512
Capacity after shrink_to_fit() is 300
Hover to see the original license.