<QtAlgorithms> - Generic Algorithms
<QtAlgorithms> ヘッダには、テンプレートベースの汎用アルゴリズムが含まれています。詳細...
Header: | #include <QtAlgorithms> |
関数
uint | qCountLeadingZeroBits(quint16 v) |
uint | qCountLeadingZeroBits(quint32 v) |
uint | qCountLeadingZeroBits(quint64 v) |
uint | qCountLeadingZeroBits(quint8 v) |
uint | qCountTrailingZeroBits(quint8 v) |
uint | qCountTrailingZeroBits(quint16 v) |
uint | qCountTrailingZeroBits(quint32 v) |
uint | qCountTrailingZeroBits(quint64 v) |
void | qDeleteAll(ForwardIterator begin, ForwardIterator end) |
void | qDeleteAll(const Container &c) |
uint | qPopulationCount(quint8 v) |
uint | qPopulationCount(quint16 v) |
uint | qPopulationCount(quint32 v) |
uint | qPopulationCount(quint64 v) |
詳しい説明
Qt では、qDeleteAll() のような、コンテナ上で動作し、生活を容易にするための小さなタスクを実行する、グローバルなテンプレート関数を<QtAlgorithms>
で多数提供しています。 () は、指定されたコンテナ内または指定された範囲内のすべてのアイテムに対してoperator delete
を呼び出します。これらのアルゴリズムは、Qt のQList 、QMap 、QHash クラスを含む、STL スタイルのイテレータを提供するコンテナ・クラスで使用できます。
ほとんどのアルゴリズムは、STLスタイルのイテレータをパラメータとして取ります。これらのアルゴリズムは、特定のイテレータ・クラスに縛られないという意味で汎用的です。
アルゴリズムによって、受け入れるイテレータの要件が異なることがあります。必要なイテレータの型は、アルゴリズムごとに指定されています。間違った型のイテレータが渡された場合(例えば、QList::ConstIterator がoutput iterator として渡された場合)、コンパイラエラーが発生します。
アルゴリズムによっては、コンテナに格納される値の型に特別な要求がある。例えば、qDeleteAll() は、値型が非 const ポインタ型(例えば、QWidget *)であることを要求する。値型の要件はアルゴリズムごとに指定されており、要件を満たさない場合、コンパイラはエラーを生成する。
ジェネリック・アルゴリズムは、QtやSTLが提供する以外のコンテナ・クラスでも使用できます。STLスタイルのイテレータの構文はC++のポインタをモデルにしているため、プレーンな配列をコンテナとして使用し、プレーンなポインタをイテレータとして使用することができます。
イテレータの種類
アルゴリズムは、受け入れるイテレータの型に一定の要件を持っており、これらは関数ごとに個別に指定されています。要件を満たさない場合、コンパイラはエラーを出します。
入力イテレータ
入力イテレータは、コンテナからデータを順次読み込むために使用できるイテレータです。イテレータは、2 つのイテレータを比較するための==
と!=
、アイテムに格納されている値を取得するための単項式*
、次のアイテムに進むための接頭辞++
を提供しなければなりません。
Qt コンテナのイテレータ型(const および non-const)は、すべて入力イテレータです。
出力イテレータ
出力イテレータは、コンテナや出力ストリームに順次データを書き込むためのイテレータです。次の演算子を提供する必要があります:値を書き込むための単項式*
(すなわち、*it = val
)と、次の項目に進むための接頭辞++
。
Qt コンテナの非 const イテレータ型は、すべて出力イテレータです。
フォワード・イテレータ
順方向イテレータは、入力イテレータと出力イテレータの両方の要件を満たすイテレータです。
Qt コンテナの非構成イテレータ型は、すべて順方向イテレータです。
双方向イテレータ
双方向イテレータは、順方向イテレータの要件を満たすイテレータですが、それに加えて、逆方向に反復するための prefix--
をサポートしています。
Qt コンテナの非 const イテレータ型は、すべて双方向イテレータです。
ランダムアクセスイテレータ
最後のカテゴリであるランダムアクセス・イテレータは、最も強力なタイプのイテレータです。双方向イテレータのすべての要件をサポートし、以下の操作をサポートしています:
i += n | イテレータi をn の位置だけ進める。 |
i -= n | イテレータi をn の位置だけ戻す。 |
i + n またはn + i | イテレータの前にあるアイテムn のイテレータを返すi |
i - n | イテレータの後ろにあるアイテムn のイテレータを返す。i |
i - j | イテレータi と の間にあるアイテムの数を返す。j |
i[n] | と同じ*(i + n) |
i < j | イテレータj がイテレータの後にある場合、true を返す。i |
QListの非 const イテレータ型はランダムアクセス・イテレータです。
コンテナクラスおよび<QtGlobal>も参照のこと 。
関数説明
[constexpr noexcept]
uint qCountLeadingZeroBits(quint16 v)
v において、MSB から検索する場合、連続するゼロビットの数を返す。例えば、 qCountLeadingZeroBits(quint16(1)) は 15 を返し、 qCountLeadingZeroBits(quint16(8)) は 12 を返す。
[constexpr noexcept]
uint qCountLeadingZeroBits(quint32 v)
v 、MSBから検索する場合に、連続するゼロビットの数を返す。例えば、qCountLeadingZeroBits(quint32(1)) は 31 を返し、qCountLeadingZeroBits(quint32(8)) は 28 を返します。
[constexpr noexcept]
uint qCountLeadingZeroBits(quint64 v)
v において、MSB から検索する場合に連続するゼロ・ビットの数を返す。例えば、qCountLeadingZeroBits(quint64(1)) は 63 を返し、qCountLeadingZeroBits(quint64(8)) は 60 を返す。
[constexpr noexcept]
uint qCountLeadingZeroBits(quint8 v)
qCountLeadingZeroBits(quint64(8)) は、v において、MSB から検索する場合に連続するゼロ・ビットの数を返す。例えば、qCountLeadingZeroBits(quint8(1)) は 7 を返し、qCountLeadingZeroBits(quint8(8)) は 4 を返します。
[constexpr noexcept]
uint qCountTrailingZeroBits(quint8 v)
qCountLeadingZeroBits(quint8(8)) は 4 を返す。v 、LSB から検索した場合に、連続するゼロ・ビットの数を返す。例えば、qCountTrailingZeroBits(1) は 0 を返し、qCountTrailingZeroBits(8) は 3 を返す。
[constexpr noexcept]
uint qCountTrailingZeroBits(quint16 v)
これはオーバーロードされた関数です。
[constexpr noexcept]
uint qCountTrailingZeroBits(quint32 v)
これはオーバーロードされた関数である。
[constexpr noexcept]
uint qCountTrailingZeroBits(quint64 v)
これはオーバーロードされた関数です。
template <typename ForwardIterator> void qDeleteAll(ForwardIterator begin, ForwardIterator end)
C++ のdelete
演算子を使用して、範囲 [begin,end] 内のすべての項目を削除します。項目型はポインタ型でなければなりません(例えば、QWidget *
)。
例
QList<Employee *> list; list.append(new Employee("Blackpool", "Stephen")); list.append(new Employee("Twist", "Oliver")); qDeleteAll(list.begin(), list.end()); list.clear();
qDeleteAll() は、コンテナから項目を削除するのではなく、単にdelete
を呼び出すだけであることに注意。上の例では、コンテナに対して clear() を呼び出して項目を削除しています。
この関数は、QMap やQHash などの連想コンテナに格納されている項目を削除する場合にも使用できます。この関数で削除されるのは、各コンテナに格納されているオブジェクトだけで、キーとして使用されているオブジェクトは削除されません。
forward iteratorsも参照してください 。
template <typename Container> void qDeleteAll(const Container &c)
これはオーバーロードされた関数です。
これは qDeleteAll(c.begin(),c.end()) と同じです。
[constexpr noexcept]
uint qPopulationCount(quint8 v)
v で設定されているビット数を返します。この数値はv のハミング重みとも呼ばれる。
[constexpr noexcept]
uint qPopulationCount(quint16 v)
これはオーバーロードされた関数である。
[constexpr noexcept]
uint qPopulationCount(quint32 v)
これはオーバーロードされた関数である。
[constexpr noexcept]
uint qPopulationCount(quint64 v)
これはオーバーロードされた関数です。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。