Upgrade to Pro — share decks privately, control downloads, hide ads and more …

C++でコンテナを再実装する課題をざっくり理解する / A quick understanding of a project to reimplement containers in C++

nafuka
November 16, 2021

C++でコンテナを再実装する課題をざっくり理解する / A quick understanding of a project to reimplement containers in C++

nafuka

November 16, 2021
Tweet

More Decks by nafuka

Other Decks in Programming

Transcript

  1. コンテナ vector, map, stack, set イテレータ ++iter, --iter, *iter アルゴリズム

    sort, swap, min, max 1 2 3 4 5 2 B 1 A 3 C 1 2 3 4 5 ++ * -- 3 5 1 4 2 1 2 3 4 5 1 2 3
  2. vector:メンバ変数 1 2 3 4 5 first last capacity_last alloc(Allocator)

    C言語における mallocやfreeをし てくれる
  3. tree(クラス) map:メンバ変数 3 “Three” 1 “One” 10 “Ten” 2 “Two”

    0 “Zero” key_comp value_comp nil NULL相当 の要素 begin end compare size
  4. • コンストラクタ/デストラクタ • 要素のアクセス(先頭/末尾/キー) ◦ 例:map[1]で ”One” を取得 • 要素の追加/削除

    • 要素の検索 • map同士の比較/入れ替え などなど…全部で44個ぐらい関数があります map:関数
  5. tree set:メンバ変数 3 1 10 0 2 compare ダミー begin

    end nil NULL相当 の要素 compare size
  6. • 江添亮の入門C++ ◦ vectorの実装が参考になります • hacking C++ ◦ 各コンテナを図で説明していて分かりやすいです •

    cplusplus.com と cppreference.com ◦ cppreference.comだとC++98扱いになってる関数があり注意(map::atなど) • Clangのソース と GCCのソース • C++98でMapを再実装する - Nafuka Lines ◦ 自分の記事です 参考URL