iterator Class

class QSet::iterator

QSet::iterator クラスは、QSet 用の STL スタイルの非 const イテレータを提供します。さらに...

パブリック型

パブリック関数

iterator()
iterator(const QSet<T>::iterator &other)
bool operator!=(const QSet<T>::iterator &other) const
bool operator!=(const QSet<T>::const_iterator &other) const
const T &operator*() const
QSet<T>::iterator &operator++()
QSet<T>::iterator operator++(int)
const T *operator->() const
QSet<T>::iterator &operator=(const QSet<T>::iterator &other)
bool operator==(const QSet<T>::iterator &other) const
bool operator==(const QSet<T>::const_iterator &other) const

詳細説明

QSet には、STLスタイルのイテレータと Javaスタイルのイテレータの両方が用意されている。STLスタイルのイテレータは、より低レベルで使い方が面倒です。一方、若干高速で、すでにSTLを知っている開発者にとっては、親しみやすいという利点があります。

QSet<T>::iterator を使うと、QSet を繰り返し処理したり、(QSet::erase() を使って)アイテムを削除したりすることができます。(QSet では、イテレータを通して値を変更することはできません。これは、QSet で使用される内部ハッシュテーブルの値を移動する必要がある可能性があるためです)。constQSet を反復処理したい場合は、QSet::const_iterator を使用する必要があります。イテレータを通してQSet を変更する必要がない限り、constでないQSet に対してもQSet::const_iterator を使用するのが一般的です。const イテレータのほうが若干高速で、コードの可読性も向上します。

デフォルトのQSet::iterator コンストラクタは、初期化されていないイテレータを作成します。QSet::begin ()、QSet::end ()、QSet::insert ()のような関数を使用して初期化しなければなりません。以下は、集合に格納されているすべての項目を表示する典型的なループです:

QSet<QString> set = {"January", "February", ... "December"}

// i is a QSet<QString>::iterator
for (auto i = set.begin(), end = set.end(); i != end; ++i)
    qDebug() << *i;

以下は、反復処理中にセットから特定の項目('J'で始まるものすべて)を削除するループです:

QSet<QString> set = {"January", "February", ... "December"};

auto i = set.begin();
while (i != set.end()) {
    if ((*i).startsWith('J')) {
        i = set.erase(i);
    } else {
        ++i;
    }
}

STLスタイルのイテレータは、generic algorithms の引数として使用できます。例えば、qFind() アルゴリズムを使用してセット内の項目を見つける方法です:

QSet<QString> set;
...
const auto predicate = [](const QString &s) { return s.compare("Jeanette", Qt::CaseInsensitive) == 0; };
QSet<QString>::iterator it = std::find_if(set.begin(), set.end(), predicate);
if (it != set.end())
    cout << "Found Jeanette" << endl;

同じセットに対して複数の反復子を使用できます。

警告 暗黙的に共有されたコンテナ上のイテレータは、STLイテレータのようには動作しません。そのコンテナ上でイテレータがアクティブになっている間は、コンテナのコピーを避ける必要があります。詳細については、暗黙の共有イテレータ問題を参照してください。

QSet::const_iterator およびQMutableSetIteratorも参照して ください。

メンバ型ドキュメント

iterator::iterator_category

これらのイテレータが双方向イテレータであることを示すstd::bidirectional_iterator_tagの同義語。

メンバ関数ドキュメント

iterator::iterator()

初期化されていないイテレータを構築します。

operator*() や operator++() のような関数を、初期化されていないイテレータに対してコールしてはいけません。operator=() を使用して値を代入してから使用してください。

QSet::begin() およびQSet::end()も参照して ください。

iterator::iterator(const QSet<T>::iterator &other)

other のコピーを構築します。

QSet<T>::iterator &iterator::operator=(const QSet<T>::iterator &other)

other をこのイテレータに割り当てます。

const T &iterator::operator*() const

現在の項目への参照を返します。

operator->()も参照して ください。

const T *iterator::operator->() const

現在の項目へのポインタを返します。

operator*()も参照して ください。

bool iterator::operator==(const QSet<T>::iterator &other) const

other がこのイテレータと同じ項目を指している場合はtrue を返し、そうでない場合はfalse を返します。

operator!=()も参照

bool iterator::operator!=(const QSet<T>::const_iterator &other) const

bool iterator::operator==(const QSet<T>::const_iterator &other) const

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

bool iterator::operator!=(const QSet<T>::iterator &other) const

other がこのイテレータと異なる項目を指している場合はtrue を返し、そうでない場合はfalse を返します。

operator==()も参照

QSet<T>::iterator &iterator::operator++()

接頭辞 ++ 演算子 (++it) は、イテレータをセットの次のアイテムに進め、新しい現在のアイテムへのイテレータを返します。

QSet<T>::constEnd() でこの関数を呼び出すと、未定義の結果になります。

QSet<T>::iterator iterator::operator++(int)

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

ポストフィックス ++ 演算子 (it++) は、イテレータをセット内の次のアイテムに進め、それ以前の現在のアイテムへのイテレータを返します。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。