Skip to content

Latest commit

 

History

History
91 lines (69 loc) · 2.39 KB

shrink_to_fit.md

File metadata and controls

91 lines (69 loc) · 2.39 KB

shrink_to_fit

  • string[meta header]
  • std[meta namespace]
  • basic_string[meta class]
  • function[meta id-type]
  • cpp11[meta cpp]
void shrink_to_fit();

概要

領域をコンテナのサイズまで切り詰める

効果

  • capacity()size()に縮小させるリクエストを行う。
    • 実装依存の最適化を許可するために、縮小するという動作は仕様上強制されない。
  • C++17 : この関数によってcapacity()が増えることはない。
  • C++17 : capacity()の縮小が起こる際に、メモリの再割り当てが発生する場合がある。その際、文字列の要素に対する参照、ポインタ、およびイテレータとそれが指す要素への参照は無効となる。

戻り値

なし

計算量

  • C++17 : 最大で、要素数に対して線形時間

#include <iostream>
#include <string>

int main()
{
  std::wstring s = L"The quick brown fox jumps over the lazy dog";

  std::cout << s.capacity() << std::endl;

  // 要素削除 : capacityは減らない
  s.erase(s.begin() + 8, s.end());
  std::cout << s.capacity() << std::endl;

  // 領域を切り詰める
  s.shrink_to_fit();
  std::cout << s.capacity() << std::endl;
}
  • shrink_to_fit[color ff0000]
  • s.capacity()[link capacity.md]
  • s.erase[link erase.md]
  • s.begin()[link begin.md]
  • s.end()[link end.md]

出力例

47
47
15

実装例

void basic_string::shrink_to_fit() {
  swap(basic_string(*this));
}

バージョン

言語

  • C++11

処理系

関連項目

参照