std::vector<T,Allocator>:: shrink_to_fit
|
void
shrink_to_fit
(
)
;
|
(constexpr C++20以降) | |
未使用の容量の削除を要求します。
これは、 capacity() を size() に縮小する非拘束的な要求です。この要求が満たされるかどうかは実装に依存します。
再割り当てが発生した場合、すべてのイテレータ(
end()
イテレータを含む)および要素へのすべての参照は無効化されます。再割り当てが発生しなかった場合、イテレータや参照は無効化されません。
|
|
(C++11以降) |
目次 |
計算量
コンテナのサイズに対して最大で線形時間。
例外
非
CopyInsertable
|
(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. 追加された |
関連項目
|
要素数を返す
(公開メンバ関数) |
|
|
現在割り当てられているストレージに保持できる要素数を返す
(公開メンバ関数) |