수색…


비고

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). 여전히 주요 작업은 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)에 삽입하는 것이 빠르지 만 인덱스 룩업은 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;


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow