2014/08/28

C++ std::list, std::vector, std::dequeをまとめておく

vector

cplusplus

arrayのように連続ストレージ系のコンテナ。

  • arrayと違って可変長。
  • ランダムアクセス性が高い。
  • endに対してのaddやremoveはlist,dequeに対して効率的

  • 頻繁なallocationを防ぐために余分にメモリ確保される。
    • (actual sizeに対してcapacityを大きく確保するから。ライブラリによってallocationタイミングは分かれるが、一般的いはlogインターバル)
  • end以外へのinsertやremoveはlist,dequeに対して遅い
  • iteratorの定常性というかconsistencyはlistに比べると低い

list

cplusplus

固定処理時間でのinsert、erase(場所によらない)が特徴の双方向リストコンテナ

  • insert, erase, moveが他のコンテナと比較して速い

  • ランダムアクセス性は低い、begin/endとかからたどる必要がある(はず)O(n)

deque

cplusplus

Double-Ended-Queueの略。Queueの一種なのでbeginとendからしか拡張できない。

  • arrayと違って、可変長
  • listと違って、ランダムアクセス性は高い
    • vectorと違って分割されたChunk(+ランダムアクセス用の情報)に分けてデータを保存しているらしい。
  • vectorと違って、endだけでなくbeginへのaddやremoveも効率的

  • vectorと違って、連続的な保存は保証されない(ポインタ+オフセットでアクセスしちゃダメ)
  • beginやend以外へのinsert、removeは遅い
  • iteratorの定常性というかconsistencyはlistに比べると低い

自分用Sublime Text Plugin/設定メモ

Emacsライクな使い方にする為にST3のほうがおすすめな印象

  • SublemacsPro

    • 基本的なキーバインドはこれで
  • IMESupport(Win)

    • Windowsの場合は日本語入力をインライン化する為に必要
  • Alignment

  • Brackethighlighter

  • AutoFileName

  • OrigamiEmacs (ST2の場合のみ、ST3には同様の機能が入ってる)

    • ペインの分割とそのショートカット 参考サイト:http://xoyip.hatenablog.com/entry/2014/03/27/211804
  • Markdown用

    • OmniMarkupPreviewer Ctrl+Alt+Oでデフォルトブラウザでプレビューしてくれるらしいが、 Ubuntu?SublemacsPro?だからか効かななった。でも右クリックからプレビュー表示が可能なので問題なし

    • Trailing Spaces 改行になるスペースx2をハイライトしてくれてグー

    • monokai extended

    • Markdown Extended

  • KeyBinding ST3の時(Macでは不要だった)

    • ctrl+hのキーをleft_deleteに切り替える
 { "keys": ["ctrl+h"], "command": "left_delete" },
 // for markdown
 { "keys": ["shift+enter"], "command": "insert_snippet", "args": {"contents": "  \n"}},
  • Preference追加した項目を晒す
    "theme": "Flatland Dark.sublime-theme",
    "color_scheme": "Packages/Theme - Flatland/Flatland Dark.tmTheme",
    "flatland_square_tabs": false,

    "translate_tabs_to_spaces": true,
    "highlight_line": true,
    "draw_white_space": "all",