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()とか書きそうになるの。


スポンサーリンク

関連記事

Raspberry Pi
FCN (Fully Convolutional Network):ディープラーニングによるSema...
定数
Seleniumを使ったFXや株の自動取引
Pythonのソースコードに特化した検索エンジン『Nullege』
Javaで作られたオープンソースの3DCGレンダラ『Sunflow』
オープンソースの3Dメッシュデータライブラリ『OpenMesh』
PythonのStructure from Motionライブラリ『OpenSfM』
Raspberry PiのGPIOを操作するPythonライブラリ『RPi.GPIO』の使い方
組み込み向けのWindows OS 『Windows Embedded』
Raspberry Pi 2を買いました
読みやすくて高速なディープラーニングのフレームワーク『Caffe』
OpenCV 3.3.0 contribのsfmモジュールのサンプルを動かしてみる
UnityのMonoBehaviourクラスをシングルトン化する
Mayaのプラグイン開発
PyDataTokyo主催のDeep Learning勉強会
OpenMVSのサンプルを動かしてみる
Quartus II
WordPressプラグインによるサイトマップの自動生成
OpenCVベースの背景差分ライブラリ『BGSLibrary』
Python拡張モジュールのWindows用インストーラー配布サイト
UnityからROSを利用できる『ROS#』
Unityの薄い本
機械学習手法『SVM(Support Vector Machine)』
書籍『ROSプログラミング』
複数画像から3次元形状を再構築するライブラリ『Multi-View Environment』
PythonのHTML・XMLパーサー『BeautifulSoup』
HerokuでMEAN stack
法線マップを用意してCanvas上でShadingするサンプル
WordPressのサーバ引っ越し方法を考える
書籍『OpenCV 3 プログラミングブック』を購入
python-twitterで自分のお気に入りを取得する
OpenCVのfindEssentialMat関数を使ったサンプルを読んでみる
Google XML Sitemap Generatorプラグインを3.4.1へダウングレード
Unreal Engineの薄い本
Mechanizeで要認証Webサイトをスクレイピング
株式会社ヘキサドライブの研究室ページ
UnityのTransformクラスについて調べてみた
Webサイトのワイヤーフレームが作成できるオンラインツール
サンプルコードにも間違いはある?
Unityからkonashiをコントロールする
参考書

コメント