Qt
Qtコンテナクラス
サーチ…
備考
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)。 QStack
とstd::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)に追加、追加、挿入するのは速いですが、インデックスルックアップはQList
やQVector
- 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;