This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of CD1 status.

### 755. `std::vector` and `std:string` lack explicit shrink-to-fit operations

Section: 22.3.11.3 [vector.capacity], 21.3.3.5 [string.capacity] Status: CD1 Submitter: Beman Dawes Opened: 2007-10-31 Last modified: 2016-01-28

Priority: Not Prioritized

View other active issues in [vector.capacity].

View all other issues in [vector.capacity].

View all issues with CD1 status.

Discussion:

A `std::vector` can be shrunk-to-fit via the swap idiom:

>     vector<int> v;
>     ...
>     v.swap(vector<int>(v));  // shrink to fit

> > or:

>     vector<int>(v).swap(v);  // shrink to fit

> > or:

>     swap(v, vector<int>(v));  // shrink to fit

A non-binding request for shrink-to-fit can be made to a `std::string` via:

>     string s;
>     ...
>     s.reserve(0);

Neither of these is at all obvious to beginners, and even some experienced C++ programmers are not aware that shrink-to-fit is trivially available.

Lack of explicit functions to perform these commonly requested operations makes vector and string less usable for non-experts. Because the idioms are somewhat obscure, code readability is impaired. It is also unfortunate that two similar vector-like containers use different syntax for the same operation.

The proposed resolution addresses these concerns. The proposed function takes no arguments to keep the solution simple and focused.

Proposed resolution:

To Class template basic_string 21.3.3 [basic.string] synopsis, Class template vector 22.3.11 [vector] synopsis, and Class vector<bool> 22.3.12 [vector.bool] synopsis, add:

>     void shrink_to_fit();

To basic_string capacity 21.3.3.5 [string.capacity] and vector capacity 22.3.11.3 [vector.capacity], add:

>     void shrink_to_fit();

> > Remarks: `shrink_to_fit` is a non-binding request to reduce `capacity()` to `size()`. [Note: The request is non-binding to allow latitude for implementation-specific optimizations. — end note]

[ 850 has been added to deal with this issue with respect to `deque`. ]