Ivory Jacobs

qt vector 예제

qt vector 예제

다음 게시물에서는 컨테이너의 세계를 살펴보고 Qt가 제공하는 컨테이너와 표준 라이브러리(STL)와 비교하는 방법을 살펴봅니다. 게시물은 서로 다른 유형과 각 라이브러리에 고유한 형식을 살펴봅니다. API, 성능 및 일부 내부 구현 세부 정보도 다룹니다. 게시물의 목표는 다른 라이브러리보다 선호될 수 있는 라이브러리를 식별하는 것입니다. Qt 라이브러리에 대한 Qt의 위키 페이지에 따르면: Qt 라이브러리는 범용 템플릿 기반 컨테이너 클래스 집합을 제공합니다. 이러한 컨테이너 클래스는 STL 컨테이너보다 가볍고 안전하며 사용하기 쉽도록 설계되었습니다. STL에 익숙하지 않거나 “Qt 방법”을 수행하는 것을 선호하는 경우 STL 클래스 대신 이러한 클래스를 사용할 수 있습니다. 주세페 D`Angelo의 강연에서 그는 Qt 컨테이너가 존재하는 역사적인 이유가 있다고 설명했습니다: 표준 라이브러리를 제공하지 않은 Qt 지원 플랫폼. Qt는 ABI에서 STL 기호를 노출하고 싶지 않았습니다. 그러나 Qt5 이후 작업 STL 구현을 사용 해야 합니다. 컨테이너 유형 각 라이브러리에 대해 사용 가능한 형식을 살펴보는 것으로 시작하겠습니다.

다음 표에서는 각 컨테이너 유형에 대한 Qt 컨테이너 및 STL 대응을 나열합니다: 시퀀스 컨테이너, 컨테이너 어댑터, 관련 컨테이너(정렬 및 정렬되지 않은) 및 마지막으로 컨테이너와 유사한 클래스입니다. 참고로 일부 컨테이너는 Qt에서만 사용할 수 있으며 그 반대의 경우도 마찬가지입니다. 각 섹션에서는 고유한 Qt 유형과 몇 가지 추가 정보를 다룹니다. 시퀀스 컨테이너 Qt STL – std:array QVector std::vector -std::deque QLinkedList std::list QList – - std:forward_list 알고리즘 복잡성 유형 무작위 액세스 삽입 사전 보류 QLinkedList O(n) O(1) O(1) O(1) O(1) O(1) O(1) O(1) O(1) O(1) O(1) O(1) 상각 O(1) QVector O(1) O(n) O(n) 상각 O(1) 해당 STL 컨테이너는 동일한 복잡성을 갖습니다. QList QList는 언뜻 보기에 링크 된 목록, 즉 std:list처럼 보이지만 매우 다른 컨테이너입니다. 그것은 오히려 복잡으로 여기에 나와 함께 곰. QList는 기본적으로 빠른 임의 액세스, 삽입, 사전 및 추가를 허용하는 void* 배열입니다(위의 알고리즘 복잡성 참조). 각 void*는 힙에 할당된 추가 된 요소를 가리킵니다. 그러나 sizeof(T) <= sizeof(void*) 및 형식이 Q_MOVABLE_TYPE 또는 Q_PRIMITIVE_TYPE으로 선언된 경우 QList는 내부적으로 void*대신 T 배열을 사용합니다. 이 디자인 으로 인해 QList는 QVector에 비해 대부분의 형식에 대 한 메모리 낭비. 흥미롭게도, 공식 문서는 이전에 Qt4에서 `기본` 컨테이너로 QList를 사용 하 여 개발자를 권장, 반면 Qt5에서 공식 문서 대신 QVector를 사용 하 여 개발자를 권장: QVector 기본 첫 번째 선택 해야 합니다.

. QVector는 QVector가 항상 메모리에 순차적으로 항목을 저장하기 때문에 QVector는 일반적으로 QList보다 더 나은 성능을 제공합니다. 컨테이너 어댑터 Qt STL QStack std::stack QQueue std::queue – std::priority_queue QStack은 QVector에서 상속되는 반면, std::stack의 기본 컨테이너는 특정 요구 사항을 충족하는 모든 컨테이너일 수 있습니다.

News Categories

Vacancies

View Latest Jobs

Contact

01489 661516