サイトアイコン NegativeMindException

C++ 標準テンプレートライブラリ (STL)

C/C++ リファレンスより
まあ、常識の範囲内なんだけど。(←その割に最近さらっとコーディングミスった。)

C++ 標準テンプレートライブラリ (STL)

C++ STL (標準テンプレートライブラリ) は、 一般的なクラステンプレートとアルゴリズムの集合であり、 プログラマが キュー、 リスト や スタック のような標準的なデータ構造を容易に実装できるようにする。

C++ STL はプログラマに、3 種に分類された次の構成物を提供する:

順序コンテナ

  • C++ ベクタ
  • C++ リスト
  • C++ 両端キュー

コンテナアダプタ

  • C++ スタック
  • C++ キュー
  • C++ 優先順位付きキュー

連想コンテナ

  • C++ ビットセット
  • C++ マップ
  • C++ マルチマップ
  • C++ セット
  • C++ マルチセット

んで、その中でも良く使う代表的なもの。(主観)

C++ ベクタ(std::vector)

ベクタは、配列と同様に格納された連続要素を保持する。 ベクタ要素へのアクセス、ならびに要素の追加は 定数時間 で完了する。 一方で特定の値を突き止める、ならびにベクタへの要素挿入は 線形時間 を要する。

  • コンストラクタ ベクタを生成する関数
  • 演算子 ベクタの割り当て、比較を行う
  • assign() ベクタに要素を割り当てる
  • at() 指定した位置の要素を返す
  • back() 最終要素を返す
  • begin() 先頭を指すイテレータを返す
  • capacity() ベクタが保持できる要素数
  • clear() 全ての要素を削除する
  • empty() ベクタが空なら真
  • end() 末尾を指すイテレータを返す
  • erase() 要素を削除する
  • front() 先頭要素を返す
  • get_allocator() ベクタのアロケータを返す
  • insert() 要素をベクタに挿入する
  • max_size() ベクタが保持できる最大要素数を返す
  • pop_back() 最終要素を削除する
  • push_back() ベクタの末尾に要素を追加する
  • rbegin() ベクタ末尾を指すリバースイテレータを返す
  • rend() ベクタ先頭を指すリバースイテレータを返す
  • reserve() ベクタが保持できる要素数を設定する
  • resize() ベクタのサイズを変更する
  • size() ベクタ中の要素数を返す
  • swap() 二つのベクタを入れ替える

C++ リスト(std::list)

リストは連結リストに格納された要素のシーケンスである。 ベクタ と比較して挿入と削除は速く、ランダムアクセスは遅い。


スポンサーリンク
  • assign() リストに要素を割り当てる
  • back() 最終要素を返す
  • begin() 先頭を指すイテレータを返す
  • clear() 全ての要素を削除する
  • empty() リストが空なら真
  • end() 末尾を指すイテレータを返す
  • erase() 要素を削除する
  • front() 先頭要素を返す
  • get_allocator() リストのアロケータを返す
  • insert() 要素をリストに挿入する
  • max_size() リストが保持できる最大要素数を返す
  • merge() 二つのリストを併合する
  • pop_back() 最終要素を削除する
  • pop_front() 先頭要素を削除する
  • push_back() リストの末尾に要素を追加する
  • push_front() リストの先頭に要素を追加する
  • rbegin() リストの末尾を指すリバースイテレータを返す
  • remove() リストから要素を削除する
  • remove_if() 条件を満たす要素を削除する
  • rend() リストの先頭を指すリバースイテレータを返す
  • resize() リストのサイズを変更する
  • reverse() リストを反転させる
  • size() リスト中の要素数を返す
  • sort() リストをソートする
  • splice() 二つのリストを併合する
  • swap() 二つのリストを入れ替える
  • unique() 重複する要素を削除する

C++ マップ(std::map)

C++ マップはキー/値の対を保持する連想コンテナである。

  • begin() マップの先頭を指すイテレータを返す。
  • clear() 全ての要素を削除する
  • count() キー値が一致する要素の数を返す
  • empty() マップが空なら真
  • end() マップの末尾を指すイテレータを返す
  • equal_range() 特定のキーと一致する先頭・末尾要素を指すイテレータを返す
  • erase() 要素を削除する
  • find() 要素を検索する
  • get_allocator() マップのアロケータを返す
  • insert() 要素を挿入する
  • key_comp() キーを比較する関数を返す
  • lower_bound() キーが特定の値以上である最初の要素を指すイテレータを返す
  • max_size() 要素の最大数を返す
  • rbegin() マップの末尾を指すリバースイテレータを返す
  • rend() マップの先頭を指すリバースイテレータを返す
  • size() マップ中の要素数を返す
  • swap() 二つのマップを入れ替える
  • upper_bound() キーが特定の値を越える最初の要素を指すイテレータを返す
  • value_comp() 値を比較する関数を返す

C++ イテレータ

以下のサンプルコードはvectorのイテレータを作成して使用している:

vector&#60;<span class="synType">int</span>&#62; the_vector;
vector&#60;<span class="synType">int</span>&#62;::iterator the_iterator;
<span class="synStatement">for</span>( <span class="synType">int</span> i=<span class="synConstant">0</span>; i &#60; <span class="synConstant">10</span>; i++ )
the_vector.push_back(i);
<span class="synType">int</span> total = <span class="synConstant">0</span>;
the_iterator = the_vector.begin();
<span class="synStatement">while</span>( the_iterator != the_vector.end() ) {
total += *the_iterator;
the_iterator++;
}
cout &#60;&#60; <span class="synConstant">&#34;Total=&#34;</span> &#60;&#60; total &#60;&#60; endl;

イテレータが指すコンテナの要素にアクセスするためには参照はずし(*演算子)を利用する。

某ライブラリの影響で、○○.append()とか書きそうになるの。


スポンサーリンク

関連記事

  • Amazon Web ServicesでWordPress
  • NumSharp:C#で使えるNumPyライクな数値計算ライブラリ
  • Cartographer:オープンソースのSLAMライブラリ
  • Twitter APIのPythonラッパー『python-twitter』
  • html5のcanvasの可能性
  • OpenCVのバージョン3が正式リリースされたぞ
  • OpenCV 3.1のsfmモジュールのビルド再び
  • Unity ARKitプラグインサンプルのドキュメントを読む
  • ディープラーニングに対応したPythonの機械学習ライブラリ『Pylearn2』
  • BlenderのPython環境にPyTorchをインストールする
  • OpenCVでiPhone6sのカメラをキャリブレーションする
  • ブログをGoogle App EngineからAmazon EC2へ移行
  • OpenCVの超解像(SuperResolution)モジュールを試す
  • Google XML Sitemap Generatorプラグインを3.4.1へダウングレード
  • 続・ディープラーニングの資料
  • OpenMVSのサンプルを動かしてみる
  • Open3D:3Dデータ処理ライブラリ
  • FCN (Fully Convolutional Network):ディープラーニングによるSema...
  • FreeMoCap Project:オープンソースのマーカーレスモーションキャプチャ
  • Python拡張モジュールのWindows用インストーラー配布サイト
  • libigl:軽量なジオメトリ処理ライブラリ
  • OpenVDB:3Dボリュームデータ処理ライブラリ
  • OpenGVのライブラリ構成
  • konashiのサンプルコードを動かしてみた
  • Webスクレイピングの勉強会に行ってきた
  • スクラッチで既存のキャラクターを立体化したい
  • Theia:オープンソースのStructure from Motionライブラリ
  • OpenGV:画像からカメラの3次元位置・姿勢を推定するライブラリ
  • MPFB2:Blenderの人体モデリングアドオン
  • Raspberry PiでIoTごっこ
  • UnityでPoint Cloudを表示する方法
  • OpenCVで平均顔を作るチュートリアル
  • Blendify:コンピュータービジョン向けBlenderラッパー
  • Google Chromecast
  • クラスの基本
  • ブログのデザイン変えました
  • TensorSpace.js:ニューラルネットワークの構造を可視化するフレームワーク
  • Mayaのレンダリング アトリビュート
  • 3Dモデルを立体視で確認できるVRアプリを作っている
  • 3Dグラフィックスの入門書
  • PGGAN:段階的に解像度を上げて学習を進めるGAN
  • JavaScriptとかWebGLとかCanvasとか
  • モバイルバージョンを終了