한국어
Qt
 

C++ Class 컨테이너 클래스 - QVector

makersweb 2020.03.17 23:55 조회 수 : 2834

벡터는 요소가 삽입되거나 삭제 될 때 컨테이너가 자동으로 처리하는 저장소를 사용하여 요소의 크기를 자동으로 조정할 수 있는 동적 배열과 동일하다. 벡터 요소는 연속 저장 장치에 저당되므로 반복자를 사용하여 액세스하고 순회 할 수 있다.

일반적으로 벡터에는 데이터를 끝에 추가 한다. 중간에 데이터를 넣거나 삭제하면 이후의 배열을 확장하거나 축소해야 할 수도 있기 때문에 시간적 비용이 따른다. 마지막 요소를 제거할 때는 크기 조정이 발생하지 않기 때문에 일정한 시간 만 걸린다.

 

다음은 간단한 사용 방법 및 주요 함수를 설명한다.

 

QVector는 항목을 배열에 저장한다. 일반적으로 벡터는 초기 크기로 생성된다. QVector를 초기화하는 몇가지 방법을 보여 알아보자.

 

정수를 포함하는 QVector

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

 

다음 코드는 200개의 QString 요소로 QVector를 생성한다.

QVector<QString> vector(200);

 

요소는 기본 구성 값으로 자동 초기화된다. 다른 값으로 벡터를 초기화하려면 해당 값을 생성자에 두 번째 인수로 전달한다.

QVector<QString> vector(200, "Pass");

 

prepend() - 벡터의 시작 부분에 값을 추가.

QVector<QString> vector;
vector.prepend("one");
vector.prepend("two");
vector.prepend("three");
// vector: ["three", "two", "one"]

 

append() - 벡터의 끝에 값을 추가.

QVector<QString> vector;
vector.append("one");
vector.append("two");
QString three = "three";
vector.append(three);
// vector: ["one", "two", "three"]
// three: "three"

 

insert() - 벡터의 인덱스 위치 i에 값을 추가.

QVector<double> vector;
vector << 2.718 << 1.442 << 0.4342;
vector.insert(1, 3, 9.9);
// vector: [2.718, 9.9, 9.9, 9.9, 1.442, 0.4342]

 

data() - 벡터에 저장된 데이터에 대한 포인터를 반환.

QVector<int> vector(10);
int *data = vector.data();
for (int i = 0; i < 10; ++i)
    data[i] = 2 * i;

 

 

그외 벡터와 관련된 기능은 다음과 같다.

 

first()- 벡터의 첫 번째 항목에 대한 참조를 반환하며 벡터가 비어 있지 않다고 가정.

front() - 이 기능은 STL 호환성을 위해 제공. first()와 같음.

last() - 벡터의 마지막 항목에 대한 참조를 반환

back() - STL 호환성을 위해 제공되며 last()와 같다.

begin() – 벡터의 첫 번째 요소를 가리키는 반복자를 반환

end() – 벡터의 마지막 요소 다음에 오는 이론적 요소를 가리키는 반복자를 반환

indexOf() - 벡터에서 처음 나타나는 값의 인덱스 위치를 인덱스 위치에서 앞으로 검색하여 반환. 일치하는 항목이 없으면 -1을 반환.

QVector<QString> vector;
vector << "A" << "B" << "C" << "B" << "A";
vector.indexOf("B");            // returns 1
vector.indexOf("B", 1);         // returns 1
vector.indexOf("B", 2);         // returns 3
vector.indexOf("X");            // returns -1

 

rbegin() – 벡터의 마지막 요소를 가리키는 역 반복자를 반환(역으로 시작). 마지막 요소에서 첫 번째 요소로 이동

rend() – 벡터에서 첫 번째 요소 앞에있는 이론적 요소를 가리키는 역 반복자를 반환(역 끝으로 간주).

cbegin() – 벡터의 첫 번째 요소를 가리키는 상수 반복자를 반환.

cend() – 벡터의 마지막 요소 다음에 오는 이론적 요소를 가리키는 상수 반복자를 반환.

crbegin() – 벡터의 마지막 요소를 가리키는 상수 역 반복자를 반환(역으로 시작). 마지막 요소에서 첫 번째 요소로 이동.

crend() – 벡터에서 첫 번째 요소 앞에있는 이론적 요소를 가리키는 상수 역 반복자를 반환(역 끝으로 간주).

clear() - 벡터에서 모든 요소를 ​​제거.

move() - 인덱스 위치에 있는 항목을 인덱스 위치로 이동.

remove() - 인덱스 위치 i에서 요소를 제거

isEmpty() - 벡터의 크기가 0이면 true를 반환. 그렇지 않으면 false를 반환.

empty() - 벡터가 비어 있으면 true를 반환. isEmpty ()와 같다.

resize() - 벡터 크기를 size로 설정. 크기가 현재 크기보다 크면 요소가 끝에 추가되고 기본 구성 값으로 초기화.

size() - 벡터의 항목 수를 반환

length() - size()완 같음. QList와의 호환성을 제공.

swap() - 해당 벡터와 다른 벡터를 바꿈. 이 작업은 매우 빠르며 절대 실패하지 않는다.

QVector<T> v ...;
QVector<T>().swap(v);
Q_ASSERT(v.capacity() == 0);

 

takeAt() - 인덱스 위치 i에서 요소를 제거하고 리턴.

takeFirst() - 벡터에서 첫 번째 항목을 제거하고 반환. 이 함수는 벡터가 비어 있지 않다고 가정. 

takeLast() - 목록에서 마지막 항목을 제거하고 반환. 이 함수는 벡터가 비어 있지 않다고 가정.

 

Qt 컨테이너 및 해당 STL 대응

 

Qt는 자체 컨테이너 클래스 세트를 제공하며 STL 클래스와 유사하지만 작지만 미묘한 차이가 있다. Qt 프로그래머는 언제 어떤 Qt 컨테이너 클래스를 사용해야하는지 이해하는 것이 중요하다.

 

다음 표는 주요 순차 및 연관 Qt 컨테이너와 해당 STL 대응 항목을 나타낸다. 

Qt

 

STL

 

순차적 컨테이너

 

QVector

 

std::vector

 

 

std::deque

 

QList

 

 

QLinkedList

 

std::list

 

 

std::forward_list

 

연관된 컨테이너

 

QMap

 

std::map

 

QMultiMap

 

std::multimap

 

 

std::set

 

 

std::multiset

 

QHash

 

std::unordered_map

 

QMultiHash

 

std::unordered_multimap

 

QSet

 

std::unordered_set

 

 

std::unordered_multiset

 

 

보다시피 std::deque, std::forward_list 및 std::{multi,} set에 해당하는 Qt 컨테이너가 없으며 QList와 비슷한 STL 컨테이너가 없다.

 
번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 85850
19 QML의 사용자 정의 Image makersweb 2023.09.17 527
18 Base64로 인코딩된 파일을 복원 makersweb 2023.08.06 419
17 QProcess 예제 (프로그램 재시작) file makersweb 2023.01.25 867
16 하드디스크 드라이브 여유 공간 계산 file makersweb 2023.01.15 482
15 Qt 스마트 포인터 (QSharedPointer, QScopedPointer, QPointer) makersweb 2022.08.18 1126
14 HTTPS URL을 연결할 때 SslHandshakeFailedError 오류 makersweb 2022.07.31 355
13 응용프로그램 자동실행 설정 (on Windows) makersweb 2021.05.08 563
12 QThread 및 QMutex 예제 makersweb 2021.01.12 1346
11 QRandomGenerator 클래스를 사용하여 난수(random values) 생성 makersweb 2020.10.17 1569
10 main함수 명령줄 옵션 해석 makersweb 2020.09.01 2230
9 Qt로 데이터를 직렬화(serialization)하는 방법 makersweb 2020.08.04 2052
8 재진입(Reentrancy) 및 스레드 안전성(Thread-Safety) makersweb 2020.04.19 1216
» 컨테이너 클래스 - QVector makersweb 2020.03.17 2834
6 QLabel의 텍스트 색과 배경색을 변경 makersweb 2020.02.25 6605
5 QThread 소개 및 예제 makersweb 2019.12.25 19440
4 QScopedPointer 소개 및 사용법 makersweb 2019.11.29 1024
3 Qt애플리케이션 객체(QCoreApplication, QGuiApplication, QApplication) 에 대해서 makersweb 2019.11.11 10088
2 QPushButton 의 커스텀 이미지버튼 file makersweb 2019.11.05 6384
1 QQuickImageProvider 를 이용한 Qml 에서 이미지 표시 makersweb 2015.10.18 5995