QLinkedListとstd::forward_list
4140 ワード
forward_list
forward_listはC++11バージョンならではです.forward_listは単一チェーンテーブルとして実装され、listは双方向チェーンテーブルであるためforward_Listはlistより少し効率的です.forward_Listは効率を追求して設計されており、私たちが自分で書いたC形式の単一チェーンテーブルと同じように効率的です.
効率の問題を考慮してforward_listにはsizeメンバー関数がありません.本質的にチェーンテーブルであるため、sizeメンバーのサイズをカウントするのに定数の時間がかかります.これにより、追加のスペースが必要になり、挿入と削除の効率が低下します.forward_を取得するにはlistのサイズは、beginおよびendに対してdistanceアルゴリズム操作を呼び出すことができる.
forward_Listのほとんどの操作はlistとあまり差がありません.ここでは、異なる操作を簡単に見てみましょう.
反復器:
Listは双方向チェーンテーブルなので、逆反復器があります.そしてforward_listには逆反復器がありません.しかしlistより2つの反復器が多くなっています.
iterator before_begin() noexcept;
const_iterator before_begin() const noexcept;
この2つの反復器は、最初の要素の前の位置を指すため、参照を解くことはできません.emplaceとして使用できますafter, insert_after, erase_after or splice_afterのパラメータ.
要素を削除するアクションを追加します.
チェーンヘッダノードの前にノードを挿入し,新しいノードはargsをパラメータとして構築した.
positionの後に新しいノードを挿入
position位置のノードを削除
最初のノードを削除
なぜならリストはシングルチェーンテーブルで、リストと通じる機能を持つためにbefore_が必要ですbegin反復器は、ヘッダノードの前に新しいノードを挿入できるようにします.
他の関数はlistとあまり差がないので、ここでは繰り返しません.覚えておきたいのはforward_listにはsizeメンバー関数がありません.自分で計算してサイズを取得する必要があります.
QLinkedList
QLinkedListこそQtの本当の意味でのチェーンテーブルです.QLinkedListは実際にstd::listと同じで、双方向チェーンテーブルでもあります.QListの実際の内部はポインタ配列である.QLinkedListが提供する関数の大部分はQListと同じで、次はいくつかの異なる場所を見てみましょう.
int QLinkedList::size () const
チェーンテーブルのサイズ(ノード数)を返します.そしてforward_リストにはこの関数はありません.
const_iterator QList::constBegin () const
const_iterator QList::constEnd () const
これはQListがSTLスタイルを返す反復器です.QLinkedListではこのような関数は提供されていません.
void QList::append ( const T & value )
void QList::append ( const QList & value )
void QLinkedList::append ( const T & value )
QLinkedListは、QLinkedListパラメータのappend関数を受け入れていません.
最も重要な違いは、
QLinkedListにTはありません&
operator[] ( int i )
チェーンテーブルはインデックス操作をサポートできないに違いありません.
したがって、QListが提供するインデックスベースのすべての操作は、QLinkedListではサポートできません.例えば、次のようなものです.
const T &
at ( int i ) const
void
insert ( int i, const T & value )
void
move ( int from, int to )
void
replace ( int i, const T & value )
T
takeAt ( int i )
void
swap ( int i, int j )
他にも関数があるかもしれませんが、ここでは一つ一つ挙げません.
QLinkedListはstd::listとの変換関数を提供します.
QLinkedList
fromStdList ( const std::list & list )
std::listQLinkedList::toStdList () const
Qtコンテナは暗黙的に共有されていることを覚えておいてください.QLinkedListももちろん暗黙的な共有をサポートしています.
forward_listはC++11バージョンならではです.forward_listは単一チェーンテーブルとして実装され、listは双方向チェーンテーブルであるためforward_Listはlistより少し効率的です.forward_Listは効率を追求して設計されており、私たちが自分で書いたC形式の単一チェーンテーブルと同じように効率的です.
効率の問題を考慮してforward_listにはsizeメンバー関数がありません.本質的にチェーンテーブルであるため、sizeメンバーのサイズをカウントするのに定数の時間がかかります.これにより、追加のスペースが必要になり、挿入と削除の効率が低下します.forward_を取得するにはlistのサイズは、beginおよびendに対してdistanceアルゴリズム操作を呼び出すことができる.
forward_Listのほとんどの操作はlistとあまり差がありません.ここでは、異なる操作を簡単に見てみましょう.
反復器:
Listは双方向チェーンテーブルなので、逆反復器があります.そしてforward_listには逆反復器がありません.しかしlistより2つの反復器が多くなっています.
iterator before_begin() noexcept;
const_iterator before_begin() const noexcept;
const_iterator cbefore_begin() const noexcept;
この2つの反復器は、最初の要素の前の位置を指すため、参照を解くことはできません.emplaceとして使用できますafter, insert_after, erase_after or splice_afterのパラメータ.
要素を削除するアクションを追加します.
template <class... Args> void emplace_front (Args&&... args);
チェーンヘッダノードの前にノードを挿入し,新しいノードはargsをパラメータとして構築した.
void push_front (const value_type& val);
void push_front (value_type&& val);
, emplace_front val 。
template <class... Args> iterator emplace_after (const_iterator position, Args&&... args);
iterator insert_after ( const_iterator position, const value_type& val );
iterator insert_after ( const_iterator position, value_type&& val );
iterator insert_after ( const_iterator position, size_type n, const value_type& val );
template <class InputIterator> iterator insert_after ( const_iterator position, InputIterator first, InputIterator last );
iterator insert_after ( const_iterator position, initializer_list<value_type> il );
positionの後に新しいノードを挿入
iterator erase_after (const_iterator position);
iterator erase_after (const_iterator position, const_iterator last);
position位置のノードを削除
void pop_front();
最初のノードを削除
なぜならリストはシングルチェーンテーブルで、リストと通じる機能を持つためにbefore_が必要ですbegin反復器は、ヘッダノードの前に新しいノードを挿入できるようにします.
他の関数はlistとあまり差がないので、ここでは繰り返しません.覚えておきたいのはforward_listにはsizeメンバー関数がありません.自分で計算してサイズを取得する必要があります.
QLinkedList
QLinkedListこそQtの本当の意味でのチェーンテーブルです.QLinkedListは実際にstd::listと同じで、双方向チェーンテーブルでもあります.QListの実際の内部はポインタ配列である.QLinkedListが提供する関数の大部分はQListと同じで、次はいくつかの異なる場所を見てみましょう.
int QLinkedList::size () const
チェーンテーブルのサイズ(ノード数)を返します.そしてforward_リストにはこの関数はありません.
const_iterator QList::constBegin () const
const_iterator QList::constEnd () const
これはQListがSTLスタイルを返す反復器です.QLinkedListではこのような関数は提供されていません.
void QList::append ( const T & value )
void QList::append ( const QList
void QLinkedList::append ( const T & value )
QLinkedListは、QLinkedListパラメータのappend関数を受け入れていません.
最も重要な違いは、
QLinkedListにTはありません&
operator[] ( int i )
チェーンテーブルはインデックス操作をサポートできないに違いありません.
したがって、QListが提供するインデックスベースのすべての操作は、QLinkedListではサポートできません.例えば、次のようなものです.
const T &
at ( int i ) const
void
insert ( int i, const T & value )
void
move ( int from, int to )
void
replace ( int i, const T & value )
T
takeAt ( int i )
void
swap ( int i, int j )
他にも関数があるかもしれませんが、ここでは一つ一つ挙げません.
QLinkedListはstd::listとの変換関数を提供します.
QLinkedList
fromStdList ( const std::list
std::list
Qtコンテナは暗黙的に共有されていることを覚えておいてください.QLinkedListももちろん暗黙的な共有をサポートしています.