このページでは

<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)
(since 6.10) Result qJoin(InputIterator first, InputIterator last, Result init, const Separator &separator = {}, Projection p = {})
uint qPopulationCount(quint8 v)
uint qPopulationCount(quint16 v)
uint qPopulationCount(quint32 v)
uint qPopulationCount(quint64 v)

詳細な説明

Qtは、<QtAlgorithms> に、コンテナに対して動作し、作業を容易にするための小さなタスクを実行する多数のグローバルテンプレート関数を提供しています。例えば、qDeleteAll() は、指定されたコンテナまたは範囲内のすべての項目に対してoperator delete を呼び出します。これらのアルゴリズムは、STLスタイルのイテレータを提供する任意のコンテナクラスで使用できます。これには、QtのQList 、QMap 、およびQHash クラスも含まれます。

ほとんどのアルゴリズムは、STLスタイルのイテレータをパラメータとして受け取ります。これらのアルゴリズムは、特定のイテレータクラスに縛られないという点でジェネリックであり、特定の要件を満たすあらゆるイテレータで使用できます。

アルゴリズムによって、受け入れるイテレータに対する要件は異なります。必要なイテレータ型は、各アルゴリズムごとに指定されています。間違った型のイテレータが渡された場合(例えば、QList::ConstIterator がoutput iterator として渡された場合など)、必ずしも詳細な説明があるとは限りませんが、常にコンパイラエラーが発生します。

一部のアルゴリズムでは、コンテナに格納される値型に対して特別な要件があります。例えば、qDeleteAll() では、値型が非 const ポインタ型(例:QWidget *)であることが求められます。値型の要件はアルゴリズムごとに指定されており、要件が満たされていない場合、コンパイラはエラーを発生させます。

汎用アルゴリズムは、Qt や STL が提供するコンテナクラス以外にも使用できます。STL スタイルのイテレータの構文は C++ のポインタをモデルにしているため、単純な配列をコンテナとして、単純なポインタをイテレータとして使用することが可能です。

イテレータの型

アルゴリズムは、受け入れるイテレータ型に対して特定の要件を課しており、これらは関数ごとに個別に指定されています。要件が満たされていない場合、コンパイラはエラーを発生させます。

入力イテレータ

入力イテレータとは、コンテナからデータを順次読み取るために使用できるイテレータのことです。入力イテレータは、2つのイテレータを比較するための== および!= 、項目に格納された値を取得するための単項* 、および次の項目に進むための接頭辞++ といった演算子を提供する必要があります。

Qt コンテナのイテレータ型(const および non-const)は、すべて入力イテレータです。

出力イテレータ

出力イテレータとは、コンテナや出力ストリームにデータを順次書き込むために使用できるイテレータのことです。出力イテレータは、値を書き込むための単項演算子* (すなわち*it = val) と、次の項目に進むための接頭演算子++ を提供する必要があります。

Qt コンテナの非 const イテレータ型は、すべて出力イテレータです。

フォワードイテレータ

フォワード・イテレータとは、入力イテレータと出力イテレータの両方の要件を満たすイテレータのことです。

Qt コンテナの非 const イテレータ型は、すべてフォワード・イテレータです。

双方向イテレータ

双方向イテレータとは、前方イテレータの要件を満たすだけでなく、後方への反復のための接頭辞-- もサポートするイテレータのことです。

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)

v に対して、MSB から検索した際の連続するゼロビットの数を返します。たとえば、qCountLeadingZeroBits(quint8(1)) は 7 を返し、qCountLeadingZeroBits(quint8(8)) は 4 を返します。

[constexpr noexcept] uint qCountTrailingZeroBits(quint8 v)

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<QColor *> list;
list.append(new QColor(Qt::blue));
list.append(new QColor(Qt::yellow));

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()) と同じです。

これはオーバーロードされた関数です。

[since 6.10] template < typename InputIterator, typename Result, typename Separator = Result, typename Projection = std::identity > Result qJoin(InputIterator first, InputIterator last, Result init, const Separator &separator = {}, Projection p = {})

初期値init から開始し、first からlast までの範囲にある各エントリを累積的に加算します。各エントリは、加算される前に、射影p (デフォルトは恒等写像)を通じてマッピングされます。各エントリと次のエントリの間には、オプションでseparator が追加されます。例:

QList<int> l = {1, 2, 3};
QString res = qJoin(l.cbegin(), l.cend(), QString(), u" / ",
                    [](int n) { return QString::number(2 * n);});
// res == "2 / 4 / 6"

注: q20::identity は、C++20の機能をC++17にバックポートしたものです。 std::identityのC++17向けバックポートです。

この関数は Qt 6.10 で導入されました。

[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)

これはオーバーロードされた関数です。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.