Shrink to Fit

From GCC 3.4 calling s.reserve(res) on a string s with res < s.capacity() will reduce the string's capacity to std::max(s.size(), res).

This behaviour is suggested, but not required by the standard. Prior to GCC 3.4 the following alternative can be used instead

      std::string(str.data(), str.size()).swap(str);
   

This is similar to the idiom for reducing a vector's memory usage (see this FAQ entry) but the regular copy constructor cannot be used because libstdc++'s string is Copy-On-Write.