スワップ技法で確保した容量を削減

STLvectorにおいて一度reserveされてしまった容量(not サイズ)を削除するための技法。
単純にreserveを再度実行しても要領は削減されないので
- std::vector(x).swap(x)
と書く。

#include <iostream>
#include <vector>
int main()
{
    std::vector<int> x;
    for(int i = 0; i < 100; ++i){x.push_back(1);}    
    std::cout << "size:" << x.size()     << std::endl;
    std::cout << "capa:" << x.capacity() << std::endl;

    //resize(容量は不変)
    x.resize(10);
    std::cout << "resize"                << std::endl;   
    std::cout << "size:" << x.size()     << std::endl;
    std::cout << "capa:" << x.capacity() << std::endl;

    //スワップ技法
    std::vector<int>(x).swap(x);
    std::cout << "Swap technique"        << std::endl;
    std::cout << "size:" << x.size()     << std::endl;
    std::cout << "capa:" << x.capacity() << std::endl;

    return 0;
}

実行結果

size:100
capa:141
resize
size:10
capa:141
Swap technique
size:10
capa:10