Qt
Qt 컨테이너 클래스
수색…
비고
Qt는 자체 템플릿 컨테이너 클래스를 제공합니다. 그것들은 모두 암묵적으로 공유됩니다. 두 종류의 반복자 (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;
}
다음과 같이 출력됩니다 : Third, Second, First.
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;