nlib
nn::nlib::Nlist< T, AL > クラステンプレート

std::vectorに似た、コピーコンストラクタを持たないオブジェクトを格納可能なコンテナ類似クラスです。 [詳解]

#include "nn/nlib/Nlist.h"

nn::nlib::nlist::NlistBaseT< T >, nn::nlib::nlist::NlistAlloc< is_empty, AL >を継承しています。

公開型

typedef
typedef BaseType::value_type value_type
 要素型 T
 
typedef AL allocator_type
 アロケータの型 AL
 
typedef BaseType::size_type size_type
 符号なし整数型(size_t)
 
typedef BaseType::difference_type difference_type
 符号つき整数型(ptrdiff_t)
 
typedef BaseType::reference reference
 T&.
 
typedef BaseType::reference const_reference
 const T&
 
typedef BaseType::pointer pointer
 T*.
 
typedef BaseType::const_pointer const_pointer
 const T*
 
typedef BaseType::iterator iterator
 フォワードイテレータ
 
typedef BaseType::const_iterator const_iterator
 読み取り専用フォワードイテレータ
 

公開メンバ関数

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
 デストラクタです。
 
Nlistassign (Nlist &rhs, move_tag)
 swapを利用したムーブにより代入します。
 
 Nlist (Nlist &rhs, move_tag)
 swapを利用したムーブによりオブジェクトを構築します。
 
 Nlist (Nlist &&rhs)
 ムーブコンストラクタです。C++11の利用時に有効です。
 
Nlistoperator= (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/jsonrpc/jsonrpc.cpp.

Nlist.h19 行目に定義があります。

関数詳解

template<class T, class AL = std::allocator<char>>
nn::nlib::Nlist< T, AL >::back ( )
inline

末尾の要素の参照を返します。

戻り値
末尾の要素の参照

Nlist.h426 行目に定義があります。

template<class T, class AL = std::allocator<char>>
nn::nlib::Nlist< T, AL >::begin ( )
inlinenoexcept

コンテナの先頭を指す反復子を返します。

戻り値
コンテナの先頭を指す反復子

Nlist.h441 行目に定義があります。

template<class T, class AL = std::allocator<char>>
nn::nlib::Nlist< T, AL >::begin ( ) const
inlinenoexcept

コンテナの先頭を指す反復子を返します。

戻り値
コンテナの先頭を指す反復子

Nlist.h445 行目に定義があります。

template<class T, class AL = std::allocator<char>>
nn::nlib::Nlist< T, AL >::capacity ( ) const
inlinenoexcept

アロケート済みの要素の個数を返します。

戻り値
要素の個数

Nlist.h368 行目に定義があります。

template<class T, class AL = std::allocator<char>>
nn::nlib::Nlist< T, AL >::cbegin ( ) const
inlinenoexcept

コンテナの先頭を指す反復子を返します。

戻り値
コンテナの先頭を指す反復子(const_iterator)

Nlist.h449 行目に定義があります。

template<class T, class AL = std::allocator<char>>
nn::nlib::Nlist< T, AL >::cend ( ) const
inlinenoexcept

コンテナの末尾を指す反復子を返します。

戻り値
コンテナの末尾を指す反復子(const_iterator)

Nlist.h462 行目に定義があります。

template<class T, class AL = std::allocator<char>>
nn::nlib::Nlist< T, AL >::Clobber ( )
inlinenoexcept

要素のデストラクタを呼んだりコンテナのメモリを解放することなく、コンテナを空に戻す。

説明
特別なアロケータを用意している等といった事情から、デストラクタやメモリ解放のプロセスを全てスキップしても問題ない場合のみに利用することができます。 高速な利用後の処理が可能になります。

Nlist.h535 行目に定義があります。

template<class T, class AL = std::allocator<char>>
template<class A1 >
nn::nlib::Nlist< T, AL >::EmplaceBack ( const A1 &  a1)
inline

インプレイスで要素を追加します。

テンプレート引数
A1要素型Tのコンストラクタ引数の型
引数
[in]a1要素型Tのコンストラクタへの引数
戻り値
追加された要素へのポインタ。失敗した場合はNULL
説明
Nlistの末尾に要素を追加します。 要素はインプレイスに構築され、コピーコンストラクタ等は実行されません。 コンストラクタにはユーザーによって指定された引数が渡されます。

Nlist.h484 行目に定義があります。

template<class T, class AL = std::allocator<char>>
template<class A1 , class A2 >
nn::nlib::Nlist< T, AL >::EmplaceBack ( const A1 &  a1,
const A2 &  a2 
)
inline

インプレイスで要素を追加します。

テンプレート引数
A1要素型Tのコンストラクタ引数の型
A2要素型Tのコンストラクタ引数の型
引数
[in]a1要素型Tのコンストラクタへの引数
[in]a2要素型Tのコンストラクタへの引数
戻り値
追加された要素へのポインタ。失敗した場合はNULL

Nlist.h492 行目に定義があります。

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.h501 行目に定義があります。

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.h511 行目に定義があります。

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.h523 行目に定義があります。

template<class T, class AL = std::allocator<char>>
nn::nlib::Nlist< T, AL >::empty ( ) const
inlinenoexcept

コンテナが空かどうかを調べます。

戻り値
trueならば空

Nlist.h372 行目に定義があります。

template<class T, class AL = std::allocator<char>>
nn::nlib::Nlist< T, AL >::end ( )
inlinenoexcept

コンテナの末尾を指す反復子を返します。

戻り値
コンテナの末尾を指す反復子

Nlist.h454 行目に定義があります。

template<class T, class AL = std::allocator<char>>
nn::nlib::Nlist< T, AL >::end ( ) const
inlinenoexcept

コンテナの末尾を指す反復子を返します。

戻り値
コンテナの末尾を指す反復子

Nlist.h458 行目に定義があります。

template<class T, class AL = std::allocator<char>>
nn::nlib::Nlist< T, AL >::front ( )
inline

先頭の要素の参照を返します。

戻り値
先頭の要素の参照

Nlist.h431 行目に定義があります。

template<class T, class AL = std::allocator<char>>
nn::nlib::Nlist< T, AL >::get_allocator ( ) const
inlinenoexcept

アロケータを取得します。

戻り値
アロケータ

Nlist.h418 行目に定義があります。

template<class T, class AL = std::allocator<char>>
nn::nlib::Nlist< T, AL >::operator[] ( size_type  idx)
inline

インデックスで要素を参照します。

引数
[in]idx要素へのインデックス
戻り値
要素の参照

Nlist.h436 行目に定義があります。

template<class T, class AL = std::allocator<char>>
nn::nlib::Nlist< T, AL >::pop_back ( )
inlinenoexcept

末尾の要素を削除します。

戻り値
成功した場合はtrue

Nlist.h403 行目に定義があります。

template<class T, class AL = std::allocator<char>>
nn::nlib::Nlist< T, AL >::push_back ( void  )
inline

末尾に要素を追加してデフォルトコンストラクタで初期化します。

戻り値
追加された要素へのポインタ。失敗した場合はNULL

Nlist.h377 行目に定義があります。

template<class T , class AL >
bool nn::nlib::Nlist< T, AL >::reserve ( size_type  n)
noexcept

n 個の要素のためのメモリをアロケート済みにします。

引数
[in]nアロケート済みにする要素数
戻り値
成功ならばtrue

Nlist.h661 行目に定義があります。

template<class T, class AL = std::allocator<char>>
nn::nlib::Nlist< T, AL >::resize ( size_type  n)
inlinenoexcept

コンテナをリサイズします。

引数
[in]nリサイズ後のサイズ
戻り値
成功ならばtrue

Nlist.h373 行目に定義があります。

template<class T, class AL = std::allocator<char>>
nn::nlib::Nlist< T, AL >::size ( ) const
inlinenoexcept

格納されている要素の個数を返します。

戻り値
要素の個数

Nlist.h365 行目に定義があります。


このクラス詳解は次のファイルから抽出されました: