QT コンテナ クラス QList クラス、QLinkedList クラスおよび QVector クラス QList クラス QLinkedList クラス QVector クラス QMap クラスおよび QHash クラス QMap クラス QHash クラス STL スタイルの反復子

QT コンテナ クラス QList クラス、QLinkedList クラスおよび QVector クラス QList クラス QLinkedList クラス QVector クラス QMap クラスおよび QHash クラス QMap クラス QHash クラス STL スタイルの反復子

Qt は、一連の汎用テンプレート ベースのコンテナー クラスを提供します。QT コンテナー クラスに格納されるデータは、割り当て可能なデータ型である必要があります。つまり、このデータ型は、既定のコンストラクター、コピー コンストラクター、および代入演算子を提供する必要があります。
このようなデータ型には、基本的なデータ型 (int や double など) や QT の一部のデータ型 (QString、QDate、QTime など) など、一般的に使用されるほとんどのデータ型が含まれますが、QT やその他のサブクラスQObject( などQWidget QDialog) はコンテナに格納できず、他のサブクラスへのポインタを格納できますQObject

QList<QToolBar> list; // 无法通过编译
QList<QToolBar*> list; // 通过编译

QT コンテナ クラスはネスト可能

QHash<QString,QList<double>>

[1] QList クラス、QLinkedList クラス、QVector クラス

QList クラス

QList<T>は、特定のデータ型Tの値の列を格納する、最も一般的に使用されるコンテナー クラスです。から継承されたサブクラスはQList、などです。QByteArrayList, QItemSelection, QQueue, and QStringList

QList<T>QList<T>格納されたリスト項目の内容へのポインタを格納するポインタの配列が維持されます。したがって、QList<T>添字ベースのクイック アクセスがサポートされています。

さまざまなデータ型に対して、QList<T>さまざまなストレージ戦略が採用されています。

(1)Tポインタまたはポインタ サイズの基本型 (同じバイト数を占める) の場合、QList<T>値はその配列に直接格納されます。

(2)QList<T>オブジェクトへのポインタが格納されている場合、そのポインタは実際に格納されているオブジェクトを指します

QLinkedList クラス

QLinkedList<T>これは連結リストであり、連続していないメモリにデータを格納し、添え字を使用できず、イテレータのみを使用してデータ項目にアクセスできます

QVector クラス

QVector<T>特定のデータ型Tの一連の値を連続したメモリに格納します。QVectorの先頭または中央への挿入は、データの移動量が多いため遅くなりますQLinkedList<T>データ項目には、添え字または反復子を使用してアクセスできます。

コンテナーをトラバースするための STL スタイルの反復子

コンテナー クラス 読み取り専用イテレータ 読み書きイテレータ
QList<T>QQueue<T> QList<T>::const_iterator QList<T>::iterator
QLinkedList<T> QLinkedList<T>::const_iterator QLinkedList<T>::iterator
QVector<T>QStack<T> QVector::const_iterator QVector<T>::iterator
#include <QApplication>
#include <QDebug>

int main(int argc, char *argv[])
{
    
    
    QApplication a(argc, argv);

    QList<int> list;
    for(int j=0; j<10; j++){
    
    
        list.append(j);
    }

    QList<int>::iterator i;
    for(i=list.begin();i!=list.end();++i){
    
    
        qDebug() << (*i);
        *i = (*i) * 10;
    }

    QList<int>::const_iterator ci;
    for(ci = list.constBegin();ci!=list.constEnd();++ci){
    
    
        qDebug() << (*ci);
    }

    return a.exec();
}

[2] QMap クラスと QHash クラス

QMapクラスとQHashクラスには多くの類似した機能がありますが、違いもあります。

  • QHashQMapよりも高速なルックアップがあります。
  • QHashデータ項目は任意の順序で保存しますが、QMapデータは常にKeyキーの
  • QHashキータイプKeyoperator==()グローバルqHash(Key)機能を提供する必要がありますが、QMapキータイプKeyoperator<=()機能を提供する必要があります

QMap クラス

QMap<Key,T>Keytype のキーからtypeTの値へのマップを提供します。

QHash クラス

QHash<Key,T>QMapとほぼ同じ API を持っています。データ項目の数に合わせたQHashサイズのハッシュ テーブルを維持するQHash

コンテナーをトラバースするための STL スタイルの反復子

コンテナー クラス 読み取り専用イテレータ 読み書きイテレータ
QMap<Key,T>QMultiMap<Key,T> QMap<Key,T>::const_iterator QMap<Key,T>::iterator
QHash<Key,T>QMultiHash<Key,T> QHash<Key,T>QMultiHash<Key,T>``QHash<Key,T>::const_iterator QHash<Key,T>::iterator
#include <QApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
    
    
    QApplication a(argc, argv);
    QMap<QString,QString> map;
    map.insert("abc","123");
    map.insert("def","456");
    map.insert("hij","789");

    QMap<QString,QString>::const_iterator ci;
    for(ci=map.constBegin();ci!=map.constEnd();ci++){
    
    
        qDebug() << "Key = " << ci.key() << ", Value = " << ci.value();
    }

    QMap<QString,QString>::iterator i;
    i = map.find("abc");
    if(i!=map.end()){
    
    
        i.value() = "000";
    }
    qDebug() << "------------";
    QMap<QString,QString>::const_iterator ci2;
    for(ci2=map.constBegin();ci2!=map.constEnd();ci2++){
    
    
        qDebug() << "Key = " << ci2.key() << ", Value = " << ci2.value();
    }

    return a.exec();
}

おすすめ

転載: blog.csdn.net/m0_45463480/article/details/130439445