最終更新日時:
が更新

履歴 編集

function
<hive>

std::hive::reshape(C++26)

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

処理系

関連項目

参照