std::vector
に似た、コピーコンストラクタを持たないオブジェクトを格納可能なコンテナ類似クラスです。
[詳解]
#include "nn/nlib/Nlist.h"
nn::nlib::nlist::NlistBaseT< T >, nn::nlib::nlist::NlistAlloc< is_empty, AL >を継承しています。
|
size_type | size () const noexcept |
| 格納されている要素の個数を返します。 [詳解]
|
|
size_type | capacity () const noexcept |
| アロケート済みの要素の個数を返します。 [詳解]
|
|
bool | empty () const noexcept |
| コンテナが空かどうかを調べます。 [詳解]
|
|
bool | resize (size_type n) noexcept |
| コンテナをリサイズします。 [詳解]
|
|
bool | reserve (size_type n) noexcept |
| n 個の要素のためのメモリをアロケート済みにします。 [詳解]
|
|
pointer | push_back () |
| 末尾に要素を追加してデフォルトコンストラクタで初期化します。 [詳解]
|
|
bool | pop_back () noexcept |
| 末尾の要素を削除します。 [詳解]
|
|
void | swap (Nlist &rhs) noexcept |
| コンテナをスワップします。
|
|
void | clear () noexcept |
| コンテナをクリアします。
|
|
allocator_type | get_allocator () const noexcept |
| アロケータを取得します。 [詳解]
|
|
const_reference | back () const |
| back() と同様です。
|
|
reference | back () |
| 末尾の要素の参照を返します。 [詳解]
|
|
const_reference | front () const |
| front() と同様です。
|
|
reference | front () |
| 先頭の要素の参照を返します。 [詳解]
|
|
const_reference | operator[] (size_type idx) const |
| operator[](size_t idx) と同様です。
|
|
reference | operator[] (size_type idx) |
| インデックスで要素を参照します。 [詳解]
|
|
iterator | begin () noexcept |
| コンテナの先頭を指す反復子を返します。 [詳解]
|
|
const_iterator | begin () const noexcept |
| コンテナの先頭を指す反復子を返します。 [詳解]
|
|
const_iterator | cbegin () const noexcept |
| コンテナの先頭を指す反復子を返します。 [詳解]
|
|
iterator | end () noexcept |
| コンテナの末尾を指す反復子を返します。 [詳解]
|
|
const_iterator | end () const noexcept |
| コンテナの末尾を指す反復子を返します。 [詳解]
|
|
const_iterator | cend () const noexcept |
| コンテナの末尾を指す反復子を返します。 [詳解]
|
|
void | shrink_to_fit () noexcept |
| 可能ならばアロケートされたメモリを返却します。
|
|
template<class A1 > |
pointer | EmplaceBack (const A1 &a1) |
| インプレイスで要素を追加します。 [詳解]
|
|
template<class A1 , class A2 > |
pointer | EmplaceBack (const A1 &a1, const A2 &a2) |
| インプレイスで要素を追加します。 [詳解]
|
|
template<class A1 , class A2 , class A3 > |
pointer | EmplaceBack (const A1 &a1, const A2 &a2, const A3 &a3) |
| インプレイスで要素を追加します。 [詳解]
|
|
template<class A1 , class A2 , class A3 , class A4 > |
pointer | EmplaceBack (const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4) |
| インプレイスで要素を追加します。 [詳解]
|
|
template<class A1 , class A2 , class A3 , class A4 , class A5 > |
pointer | EmplaceBack (const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4, const A5 &a5) |
| インプレイスで要素を追加します。 [詳解]
|
|
void | Clobber () noexcept |
| 要素のデストラクタを呼んだりコンテナのメモリを解放することなく、コンテナを空に戻す。 [詳解]
|
|
|
| Nlist () noexcept |
| デフォルトコンストラクタです。空のコンテナを作成します。
|
|
| Nlist (const AL &al) noexcept |
| アロケータを指定します。空のコンテナを作成します。
|
|
| ~Nlist () noexcept |
| デストラクタです。
|
|
Nlist & | assign (Nlist &rhs, move_tag) |
| swap を利用したムーブにより代入します。
|
|
| Nlist (Nlist &rhs, move_tag) |
| swap を利用したムーブによりオブジェクトを構築します。
|
|
| Nlist (Nlist &&rhs) |
| ムーブコンストラクタです。C++11の利用時に有効です。
|
|
Nlist & | operator= (Nlist &&rhs) |
| ムーブ代入演算子です。C++11の利用時に有効です。
|
|
template<class T, class AL = std::allocator<char>>
class nn::nlib::Nlist< T, AL >
std::vector
に似た、コピーコンストラクタを持たないオブジェクトを格納可能なコンテナ類似クラスです。
- テンプレート引数
-
T | 要素の型 |
AL | アロケータの型。デフォルトはstd::allocator<char> です。 |
- 説明
- 以下に挙動の詳細や注意点を箇条書きに記します。
-
std::push_back
では(例外を有効にしない限り)、要素の追加時にout of memoryによるクラッシュが発生する可能性があります。Nlist
では要素の追加に失敗した場合、NULL
ポインタを返すので戻り値をチェックすることで問題に対処することが可能です。
-
内部でオブジェクトの再配置を行いません。一般に
std::vector
は要素を追加していく場合(又はreserveを実行した際に)、より大きなメモリを割り当てそこにデータをコピーするという動作を行います。Nlist
では追加される要素についてだけ新たにメモリを割り当てる動作を行うことで、再配置を行いません。
この動作により、再配置に必要なメモリコピーのコストや元のメモリの解放コストををかけずにstd::vector
よりも高速なpush_back動作を行うことが可能です。 また、このような動作によりスタックアロケータのような単純なアロケータを使う場合でも、メモリを効率良く割り当てることが可能です。
-
Nlist
内部のコードは要素型Tのコピーコンストラクタを利用しません。従って要素型Tにはコピーコンストラクタが定義されている必要がありません。
-
Nlist
ではインプレイスの初期化による要素の追加が可能です。Nlist
はコピーコンストラクタを利用しないため、通常のpush_back()
関数は実装されていません。
以下のメンバ関数で要素の追加が可能です。
-
T* push_back(void), デフォルトコンストラクタで作成した要素を追加します。
-
T* EmplaceBack(Tのコンストラクタへの引数リスト), 引数リストを渡して
Nlist
内部でコンストラクタを起動して要素を追加します(コピーコンストラクタの実行を避けることができます)。
-
Nlist
ではForward iteratorを実装しています。
-
Nlist
の内部はサイズの異なる配列のリストになっているのでiterator
の順方向の参照はstd::vector
並に高速です。
-
std::advance()
の実行効率は \(O(\log n)\)です。
-
std::distance()
の実行効率は \(O(1)\)です。
-
operator[]
をサポートしています。ただし、実行効率は \(O(\log idx)\)です。
-
Nlist
が定義するコンストラクタの種類は限られています。これは以下の理由によるものです。
-
out of memory問題を回避するため
-
要素型にコピーコンストラクタを要求しないため。
- 各種例:
- msgpack/json/json.cpp, msgpack/jsonrpc/jsonrpc.cpp.
Nlist.h の 19 行目に定義があります。
§ back()
template<class T, class AL = std::allocator<char>>
末尾の要素の参照を返します。
- 戻り値
- 末尾の要素の参照
Nlist.h の 426 行目に定義があります。
§ begin() [1/2]
template<class T, class AL = std::allocator<char>>
コンテナの先頭を指す反復子を返します。
- 戻り値
- コンテナの先頭を指す反復子
Nlist.h の 441 行目に定義があります。
§ begin() [2/2]
template<class T, class AL = std::allocator<char>>
コンテナの先頭を指す反復子を返します。
- 戻り値
- コンテナの先頭を指す反復子
Nlist.h の 445 行目に定義があります。
§ capacity()
template<class T, class AL = std::allocator<char>>
アロケート済みの要素の個数を返します。
- 戻り値
- 要素の個数
Nlist.h の 368 行目に定義があります。
§ cbegin()
template<class T, class AL = std::allocator<char>>
コンテナの先頭を指す反復子を返します。
- 戻り値
- コンテナの先頭を指す反復子(
const_iterator
)
Nlist.h の 449 行目に定義があります。
§ cend()
template<class T, class AL = std::allocator<char>>
コンテナの末尾を指す反復子を返します。
- 戻り値
- コンテナの末尾を指す反復子(
const_iterator
)
Nlist.h の 462 行目に定義があります。
§ Clobber()
template<class T, class AL = std::allocator<char>>
要素のデストラクタを呼んだりコンテナのメモリを解放することなく、コンテナを空に戻す。
- 説明
- 特別なアロケータを用意している等といった事情から、デストラクタやメモリ解放のプロセスを全てスキップしても問題ない場合のみに利用することができます。 高速な利用後の処理が可能になります。
Nlist.h の 535 行目に定義があります。
§ EmplaceBack() [1/5]
template<class T, class AL = std::allocator<char>>
template<class A1 >
インプレイスで要素を追加します。
- テンプレート引数
-
- 引数
-
- 戻り値
- 追加された要素へのポインタ。失敗した場合は
NULL
- 説明
Nlist
の末尾に要素を追加します。 要素はインプレイスに構築され、コピーコンストラクタ等は実行されません。 コンストラクタにはユーザーによって指定された引数が渡されます。
Nlist.h の 484 行目に定義があります。
§ EmplaceBack() [2/5]
template<class T, class AL = std::allocator<char>>
template<class A1 , class A2 >
インプレイスで要素を追加します。
- テンプレート引数
-
A1 | 要素型Tのコンストラクタ引数の型 |
A2 | 要素型Tのコンストラクタ引数の型 |
- 引数
-
[in] | a1 | 要素型Tのコンストラクタへの引数 |
[in] | a2 | 要素型Tのコンストラクタへの引数 |
- 戻り値
- 追加された要素へのポインタ。失敗した場合は
NULL
Nlist.h の 492 行目に定義があります。
§ EmplaceBack() [3/5]
template<class T, class AL = std::allocator<char>>
template<class A1 , class A2 , class A3 >
nn::nlib::Nlist< T, AL >::EmplaceBack |
( |
const A1 & |
a1, |
|
|
const A2 & |
a2, |
|
|
const A3 & |
a3 |
|
) |
| |
|
inline |
インプレイスで要素を追加します。
- テンプレート引数
-
A1 | 要素型Tのコンストラクタ引数の型 |
A2 | 要素型Tのコンストラクタ引数の型 |
A3 | 要素型Tのコンストラクタ引数の型 |
- 引数
-
[in] | a1 | 要素型Tのコンストラクタへの引数 |
[in] | a2 | 要素型Tのコンストラクタへの引数 |
[in] | a3 | 要素型Tのコンストラクタへの引数 |
- 戻り値
- 追加された要素へのポインタ。失敗した場合は
NULL
Nlist.h の 501 行目に定義があります。
§ EmplaceBack() [4/5]
template<class T, class AL = std::allocator<char>>
template<class A1 , class A2 , class A3 , class A4 >
nn::nlib::Nlist< T, AL >::EmplaceBack |
( |
const A1 & |
a1, |
|
|
const A2 & |
a2, |
|
|
const A3 & |
a3, |
|
|
const A4 & |
a4 |
|
) |
| |
|
inline |
インプレイスで要素を追加します。
- テンプレート引数
-
A1 | 要素型Tのコンストラクタ引数の型 |
A2 | 要素型Tのコンストラクタ引数の型 |
A3 | 要素型Tのコンストラクタ引数の型 |
A4 | 要素型Tのコンストラクタ引数の型 |
- 引数
-
[in] | a1 | 要素型Tのコンストラクタへの引数 |
[in] | a2 | 要素型Tのコンストラクタへの引数 |
[in] | a3 | 要素型Tのコンストラクタへの引数 |
[in] | a4 | 要素型Tのコンストラクタへの引数 |
- 戻り値
- 追加された要素へのポインタ。失敗した場合は
NULL
Nlist.h の 511 行目に定義があります。
§ EmplaceBack() [5/5]
template<class T, class AL = std::allocator<char>>
template<class A1 , class A2 , class A3 , class A4 , class A5 >
nn::nlib::Nlist< T, AL >::EmplaceBack |
( |
const A1 & |
a1, |
|
|
const A2 & |
a2, |
|
|
const A3 & |
a3, |
|
|
const A4 & |
a4, |
|
|
const A5 & |
a5 |
|
) |
| |
|
inline |
インプレイスで要素を追加します。
- テンプレート引数
-
A1 | 要素型Tのコンストラクタ引数の型 |
A2 | 要素型Tのコンストラクタ引数の型 |
A3 | 要素型Tのコンストラクタ引数の型 |
A4 | 要素型Tのコンストラクタ引数の型 |
A5 | 要素型Tのコンストラクタ引数の型 |
- 引数
-
[in] | a1 | 要素型Tのコンストラクタへの引数 |
[in] | a2 | 要素型Tのコンストラクタへの引数 |
[in] | a3 | 要素型Tのコンストラクタへの引数 |
[in] | a4 | 要素型Tのコンストラクタへの引数 |
[in] | a5 | 要素型Tのコンストラクタへの引数 |
- 戻り値
- 追加された要素へのポインタ。失敗した場合は
NULL
Nlist.h の 523 行目に定義があります。
§ empty()
template<class T, class AL = std::allocator<char>>
コンテナが空かどうかを調べます。
- 戻り値
true
ならば空
Nlist.h の 372 行目に定義があります。
§ end() [1/2]
template<class T, class AL = std::allocator<char>>
コンテナの末尾を指す反復子を返します。
- 戻り値
- コンテナの末尾を指す反復子
Nlist.h の 454 行目に定義があります。
§ end() [2/2]
template<class T, class AL = std::allocator<char>>
コンテナの末尾を指す反復子を返します。
- 戻り値
- コンテナの末尾を指す反復子
Nlist.h の 458 行目に定義があります。
§ front()
template<class T, class AL = std::allocator<char>>
先頭の要素の参照を返します。
- 戻り値
- 先頭の要素の参照
Nlist.h の 431 行目に定義があります。
§ get_allocator()
template<class T, class AL = std::allocator<char>>
§ operator[]()
template<class T, class AL = std::allocator<char>>
インデックスで要素を参照します。
- 引数
-
- 戻り値
- 要素の参照
Nlist.h の 436 行目に定義があります。
§ pop_back()
template<class T, class AL = std::allocator<char>>
末尾の要素を削除します。
- 戻り値
- 成功した場合は
true
Nlist.h の 403 行目に定義があります。
§ push_back()
template<class T, class AL = std::allocator<char>>
末尾に要素を追加してデフォルトコンストラクタで初期化します。
- 戻り値
- 追加された要素へのポインタ。失敗した場合は
NULL
Nlist.h の 377 行目に定義があります。
§ reserve()
template<class T , class AL >
n
個の要素のためのメモリをアロケート済みにします。
- 引数
-
- 戻り値
- 成功ならば
true
Nlist.h の 661 行目に定義があります。
§ resize()
template<class T, class AL = std::allocator<char>>
コンテナをリサイズします。
- 引数
-
- 戻り値
- 成功ならば
true
Nlist.h の 373 行目に定義があります。
§ size()
template<class T, class AL = std::allocator<char>>
格納されている要素の個数を返します。
- 戻り値
- 要素の個数
Nlist.h の 365 行目に定義があります。
このクラス詳解は次のファイルから抽出されました: