void reshape(hive_limits block_limits); // C++26
概要
要素ブロックの容量制限を変更する。
要素ブロックが保持できる要素数の下限・上限(hive_limits)をblock_limitsに変更する。新しい制限の範囲外となる要素ブロックがあれば、その要素を範囲内の要素ブロックに再割り当てし、範囲外の要素ブロックを解放する。
事前条件
型Tが*thisに対してムーブ挿入可能であること。
効果
block_limitsの範囲外にあるすべてのアクティブブロックについて、そのブロック内の要素を、範囲内にある新規または既存の要素ブロックへ再割り当てする。block_limitsの範囲外にある要素ブロックはすべて解放する。
新しい要素ブロックの確保中に例外が送出された場合、capacity()は削減されることがあり、再割り当てが発生することがあり、現在の容量制限にblock_limits以外の値が設定されることがある。そうでない場合、現在の容量制限にblock_limitsが設定される。それ以外の例外が送出された場合の効果は未規定である。
戻り値
なし
事後条件
size()は変化しない。
計算量
*thisの要素ブロックの数に対して線形時間。再割り当てが発生する場合、加えて再割り当てされる要素の数に対して線形時間。
備考
この操作はcapacity()を変化させることがある。再割り当てが発生する場合、*thisの要素の順序が変化することがあり、*thisの要素を指すすべての参照、ポインタ、イテレータ、および終端イテレータが無効になる。再割り当てが発生しなかった場合、これらは有効なままである。
例
#include <hive>
#include <print>
int main()
{
// 最小3・最大16の容量制限で構築する
std::hive<int> h{std::hive_limits{3, 16}};
for (int i = 0; i < 100; ++i) {
h.insert(i);
}
// 容量制限をより大きなブロックへ変更する
h.reshape(std::hive_limits{32, 64});
std::println("min={}, max={}", h.block_capacity_limits().min,
h.block_capacity_limits().max);
std::println("size={}", h.size());
}
出力
min=32, max=64
size=100
バージョン
言語
- C++26
処理系
- Clang: 22 ❌
- GCC: 16.1 ❌
- Visual C++: 2026 Update 2 ❌