C++標準テンプレートライブラリSTLの利用
STLとは
STL:Standard Template Library
C++のテンプレート機能を最大限に利用した標準ライブラリ。
STLは簡単にいうと配列のような要素の集合(コンテナ)を扱いやすくしたもの。
たとえば、動的な配列の確保を繰り返したり、ソートしたり、FIFOの構成を作ったり、連想配列を構成したりがSTLを使うことで容易になる。また、速度も早い。
現在すべてのC++のコンパイラで提供されている。
SystemCはVerilog-HDLと違って、C++で記述できるものは制限なく使うことができるのが利点。なので、活用できる便利な機能は存分に使うべし。
C++のテンプレート機能を最大限に利用した標準ライブラリ。
STLは簡単にいうと配列のような要素の集合(コンテナ)を扱いやすくしたもの。
たとえば、動的な配列の確保を繰り返したり、ソートしたり、FIFOの構成を作ったり、連想配列を構成したりがSTLを使うことで容易になる。また、速度も早い。
現在すべてのC++のコンパイラで提供されている。
SystemCはVerilog-HDLと違って、C++で記述できるものは制限なく使うことができるのが利点。なので、活用できる便利な機能は存分に使うべし。
STLの構成
次のもので構成されている。
- コンテナ
- 共通アルゴリズム
- イテレータ
- 関数オブジェクト
ここでは、最低限使えればとりあえずよしとし、あまり詳しく説明しない。
もし、興味があるようであれば、別のサイトを参照のこと。
もし、興味があるようであれば、別のサイトを参照のこと。
コンテナの種類
代表的なものは以下のとおり。
| コンテナ | 説明 |
| vector<> | 動的配列、ランダムアクセスが可能、Cの配列と互換がある |
| deque<> | 動的配列、両端キュー |
| map<> | 連想配列、バイナリツリーに要素を持ちソートされた状態で取り出せる |
| list<> | 双方向リンクドリスト、要素の入れ換えが得意 |
vector<>の利用
vectorは動的配列。
ランダムアクセスに向いているが、要素の追加・削除は要素数に比例して時間がかかる。
配列の代わりに使用するとよい。
ランダムアクセスに向いているが、要素の追加・削除は要素数に比例して時間がかかる。
配列の代わりに使用するとよい。
vectorコンテナを利用するには次をインクルードする必要がある。
#include <vector>
必要なら次のおまじないをかく。
using namespace std;
もし、ネームスペースがわかる人であれば、いちいちstd::を書くことをすすめる。
vectorへのおもなアクセス
以下は全てではないが、よく使いそうなものを挙げた。
| メソッド・書式 | 説明 |
| iterator begin() | 先頭を表すイタレータを返す |
| iterator end() | 末尾を表すイタレータを返す |
| bool empty() | vectorの要素が空なら"true"、空でなければ"false"を返す |
| int size() | 要素数を返す |
| void clear() | すべての要素を削除 |
| reference at( size_type pos ) | pos番目の要素を返す |
| reference operator[]( size_type pos ) | pos番目の要素を返す。「at」を使用することを推奨) |
| void assign( const iterator first, const iterator last ) | vectorの内容をfirstからlastに置き換え |
| void assign( size_type n, const T& x = T() ) | vectorの内容をn個のxに置き換え |
| void swap( vector x ) | vectorの内容をxと交換 |
| void resize(size_type new_size, T& x = T()) | 大きさを変える。必要なら領域を拡張し、拡張分はxで初期化される |
- コンストラクタ
| 書式 | 説明(例) |
| vector(); | 例) vector<int> vect; 長さ0のint型のvectorを作る |
| vector( size_type size ); | 例) vector<int> vect2(20); 長さ20のint型vectorを作る |
| vector( size_type size, const TYPE &val ); | 例) vector<int> vect3(10, 100); 長さ10のint型vectorを作り、すべての要素を100で初期化する |
| vector( const vector &from ); | 例) vector<int> vect4(vect1); vect1をコピーし、vect4とする |
メモリとしてのvectorの利用例
std::vector<unsigned int> mem( 1024, 0 ); // RAM、1024個用意し、すべて0で初期化
// Write
mem.at(addr) = w_data; // mem[addr] = w_data; でもOK
// Read
mem[addr] = mem.at(addr); // r_data = mem[addr]; でもOK
