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.
Section: 24.3.11.3 [vector.capacity], 23.4.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 fitor:
vector<int>(v).swap(v); // shrink to fitor:
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 23.4.3 [basic.string] synopsis, Class template vector 24.3.11 [vector] synopsis, and Class vector<bool> 24.3.12 [vector.bool] synopsis, add:
void shrink_to_fit();
To basic_string capacity 23.4.3.5 [string.capacity] and vector capacity 24.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. ]