Namespaces
Variants

std::vector<T,Allocator>:: shrink_to_fit

From cppreference.net

void shrink_to_fit ( ) ;
(constexpr C++20以降)

未使用の容量の削除を要求します。

これは、 capacity() size() に縮小する非拘束的な要求です。この要求が満たされるかどうかは実装に依存します。

再割り当てが発生した場合、すべてのイテレータ( end() イテレータを含む)および要素へのすべての参照は無効化されます。再割り当てが発生しなかった場合、イテレータや参照は無効化されません。

T MoveInsertable でない場合、 std:: vector < T, Allocator > への挿入は未定義動作となります。

(C++11以降)

目次

計算量

コンテナのサイズに対して最大で線形時間。

例外

CopyInsertable T のムーブコンストラクタ以外によって例外がスローされた場合、何の効果もない。

(C++11以降)

注記

libstdc++では、 shrink_to_fit() 利用できません C++98モードでは。

#include <iostream>
#include <vector>
int main()
{
    std::vector<int> v;
    std::cout << "Default-constructed capacity is " << v.capacity() << '\n';
    v.resize(100);
    std::cout << "Capacity of a 100-element vector is " << v.capacity() << '\n';
    v.resize(50);
    std::cout << "Capacity after resize(50) is " << v.capacity() << '\n';
    v.shrink_to_fit();
    std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n';
    v.clear();
    std::cout << "Capacity after clear() is " << v.capacity() << '\n';
    v.shrink_to_fit();
    std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n';
    for (int i = 1000; i < 1300; ++i)
        v.push_back(i);
    std::cout << "Capacity after adding 300 elements is " << v.capacity() << '\n';
    v.shrink_to_fit();
    std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n';
}

出力例:

Default-constructed capacity is 0
Capacity of a 100-element vector is 100
Capacity after resize(50) is 100
Capacity after shrink_to_fit() is 50
Capacity after clear() is 50
Capacity after shrink_to_fit() is 0
Capacity after adding 300 elements is 512
Capacity after shrink_to_fit() is 300

欠陥報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の仕様 修正後の仕様
LWG 755 C++98 std::vector に明示的なshrink-to-fit操作がなかった 提供された
LWG 2033 C++98
C++11
1. 計算量要件が欠如していた (C++98)
2. T MoveInsertable であることが要求されていなかった (C++11)
1. 追加された
2. 要求されるようになった
LWG 2223 C++98
C++11
1. 参照、ポインタ、イテレータが無効化されないとされていた (C++98)
2. 例外安全性保証がなかった (C++11)
1. 無効化される可能性がある
2. 追加された

関連項目

要素数を返す
(公開メンバ関数)
現在割り当てられているストレージに保持できる要素数を返す
(公開メンバ関数)