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