スワップ技法で確保した容量を削減
STLのvectorにおいて一度reserveされてしまった容量(not サイズ)を削除するための技法。
単純にreserveを再度実行しても要領は削減されないので
- std::vector
と書く。
#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