名前空間
変種
操作

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

From cppreference.com
< cpp‎ | コンテナ‎ | vector
 
 
 
 
void shrink_to_fit();
(C++20 以降 constexpr)

未使用のキャパシティの削除を要求します。

capacity()size()に減らすための拘束力のない要求です。この要求が満たされるかどうかは、実装に依存します。

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

Tstd::vector<T, Allocator>MoveInsertableでない場合、動作は未定義です。

(C++11以降)

目次

[編集] 複雑度

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

例外

CopyInsertableでないTのムーブコンストラクタ以外で例外がスローされた場合、影響はありません。

(C++11以降)

[編集] 注釈

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

[編集]

#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. TMoveInsertableである必要はなかった (C++11)
1. 追加された
2. 必須となった
LWG 2223 C++98
C++11
1. 参照、ポインタ、イテレータは無効化されなかった (C++98)
2. 例外安全保証がなかった (C++11)
1. 無効化される可能性がある
2. 追加

[編集] 関連項目

要素数を返す
(public メンバ関数) [編集]
現在確保されているストレージに保持できる要素数を返す
(public member function) [編集]
English 日本語 中文(简体) 中文(繁體)