サーチ…


備考

Qtは独自のテンプレートコンテナクラスを提供しています。それらはすべて暗黙的に共有されています。 2種類のイテレーター(JavaスタイルとSTLスタイル)を提供します。

Qtシーケンシャルコンテナには、QVector、QList、QLinkedList、QStack、QQueueがあります。

Qt連想型コンテナーには、QMap、QMultiMap、QHash、QMultiHash、QSetがあります。

QStackの使用法

QStack<T>はスタックを提供するテンプレートQtクラスです。 STLのアナログはstd::stackです。ラスト・イン・ファースト・アウト・ストラクチャー(LIFO)です。

QStack<QString> stack;
stack.push("First");
stack.push("Second");
stack.push("Third");
while (!stack.isEmpty())
{
    cout << stack.pop() << endl;
}

それは出力します:第三、第二、第一。

QStack継承してQVectorため、その実装はSTLとはまったく異なります。 STLでは、 std::stackは、テンプレートの引数として渡される型へのラッパーとして実装されています(デキューはデフォルトでdeque)。 QStackstd::stack主な操作は同じです。

QVectorの使用

QVector<T>は動的配列テンプレートクラスを提供します。これは、ほとんどの場合、 QList<T>よりも優れたパフォーマンスを提供するので、最初の選択であるべきです。

さまざまな方法で初期化することができます。

QVector<int> vect;
vect << 1 << 2 << 3;

QVector<int> v {1, 2, 3, 4};

最新のものは初期化リストです。

QVector<QString> stringsVector;
stringsVector.append("First");
stringsVector.append("Second");

あなたはこのようにベクトルのi番目の要素を得ることができます:

v[i]またはat[i]

iが有効な位置であることを確認してください。 at(i)チェックをしていなくても、これはstd::vectorとの違いです。

QLinkedListの使用法

リンクリストを実装する必要がある場合は、QtでQLinkedListを使用する必要があります

要素をQLinkedList - O(1)に追加、追加、挿入するのは速いですが、インデックスルックアップはQListQVector - O(n)より遅いです。これは通常、リンクされたリストで何かを見つけるためにノードを反復する必要があることに注意しています。

完全なアルゴリズム的なcompexityテーブルはここで見つけることができます

いくつかの要素をQLinkedListに挿入するだけで、演算子<<()使うことができます:

QLinkedList<QString> list;
list << "string1" << "string2" << "string3";

QLinkedListの途中に要素を挿入したり、要素のすべてまたは一部を変更するには、JavaスタイルまたはSTLスタイルのイテレーターを使用できます。ここでは、 QLinkedListすべての要素に2を掛ける簡単な例を示します。

QLinkedList<int> integerList {1, 2, 3};
QLinkedList<int>::iterator it;
for (it = integerList.begin(); it != integerList.end(); ++it)
{
    *it *= 2;
}

QList

QListクラスは、リストを提供するテンプレートクラスです。インデックスに基づく高速アクセスとインデックスベースの挿入と削除を可能にするアイテムをリストに格納します。

項目をリストに挿入するには、 operator<<()insert()append()またはprepend()を使用できます。例えば:

operator<<()

QList<QString> list;
list << "one" << "two" << "three";

insert()

QList<QString> list;
list << "alpha" << "beta" << "delta";
list.insert(2, "gamma");

append()

QList<QString> list;
list.append("one");
list.append("two");
list.append("three");

prepend()

QList<QString> list;
list.prepend("one");
list.prepend("two");
list.prepend("three");

特定のインデックス位置にあるアイテムにアクセスするには、 operator[]()またはat()ます。 at()operator[]()より速いかもしれません。コンテナの深いコピーを引き起こすことはなく、一定の時間内に動作するはずです。どちらも引数チェックをしません。例:

if (list[0] == "mystring")
    cout << "mystring found" << endl;

または

if (list.at(i) == "mystring")
    cout << "mystring found at position " << i << endl;

アイテムを削除するには、 removeAt()takeAt()takeFirst()takeLast()removeFirst()removeLast() 、またはremoveOne()などのremoveOne()ます。例:

takeFirst()

// takeFirst() removes the first item in the list and returns it
QList<QWidget *> list;
...
while (!list.isEmpty())
    delete list.takeFirst();

removeOne()

// removeOne() removes the first occurrence of value in the list
QList<QString> list;
list << "sun" << "cloud" << "sun" << "rain";
list.removeOne("sun");

リスト内の特定の値のすべての出現を見つけるには、 indexOf()またはlastIndexOf()ます。例:

indexOf()

int i = list.indexOf("mystring");
if (i != -1)
    cout << "First occurrence of mystring is at position " << i << endl;


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow