<QtAlgorithms> - Generic Algorithms

<QtAlgorithms> 헤더에는 일반적인 템플릿 기반 알고리즘이 포함되어 있습니다. 더 보기...

Header: #include <QtAlgorithms>

함수

uint qCountLeadingZeroBits(quint16 v)
uint qCountLeadingZeroBits(quint32 v)
uint qCountLeadingZeroBits(quint64 v)
uint qCountLeadingZeroBits(quint8 v)
uint qCountTrailingZeroBits(quint8 v)
uint qCountTrailingZeroBits(quint16 v)
uint qCountTrailingZeroBits(quint32 v)
uint qCountTrailingZeroBits(quint64 v)
void qDeleteAll(ForwardIterator begin, ForwardIterator end)
void qDeleteAll(const Container &c)
uint qPopulationCount(quint8 v)
uint qPopulationCount(quint16 v)
uint qPopulationCount(quint32 v)
uint qPopulationCount(quint64 v)

자세한 설명

Qt는 주어진 컨테이너의 모든 항목 또는 주어진 범위에서 operator delete 를 호출하는 qDeleteAll()와 같이 컨테이너에서 작동하고 작은 작업을 수행하여 생활을 편리하게 해주는 여러 글로벌 템플릿 함수를 <QtAlgorithms> 에서 제공합니다. 이러한 알고리즘은 Qt의 QList, QMap, QHash 클래스를 포함하여 STL 스타일 이터레이터를 제공하는 모든 컨테이너 클래스와 함께 사용할 수 있습니다.

대부분의 알고리즘은 STL 스타일 이터레이터를 매개변수로 사용합니다. 알고리즘은 특정 이터레이터 클래스에 구속되지 않는다는 점에서 일반적이며, 특정 요구 사항을 충족하는 모든 이터레이터와 함께 사용할 수 있습니다.

알고리즘마다 허용하는 반복자에 대한 요구 사항이 다를 수 있습니다. 필요한 반복자 유형은 각 알고리즘마다 지정됩니다. 잘못된 유형의 반복자가 전달되면(예: QList::ConstIteratoroutput iterator 으로 전달되는 경우) 반드시 유익한 정보는 아니지만 항상 컴파일러 오류가 발생합니다.

일부 알고리즘에는 컨테이너에 저장된 값 유형에 대한 특별한 요구 사항이 있습니다. 예를 들어 qDeleteAll()는 값 유형이 컨스트가 아닌 포인터 유형이어야 합니다(예: QWidget *). 값 유형 요구 사항은 각 알고리즘에 대해 지정되며, 요구 사항이 충족되지 않으면 컴파일러에서 오류를 생성합니다.

일반 알고리즘은 Qt와 STL에서 제공하는 알고리즘이 아닌 다른 컨테이너 클래스에서도 사용할 수 있습니다. STL 스타일 이터레이터의 구문은 C++ 포인터를 모델로 하고 있으므로 일반 배열을 컨테이너로, 일반 포인터를 이터레이터로 사용할 수 있습니다.

이터레이터의 유형

알고리즘은 허용하는 이터레이터 유형에 대한 특정 요구 사항을 가지고 있으며, 이는 각 함수마다 개별적으로 지정됩니다. 요구 사항이 충족되지 않으면 컴파일러가 오류를 생성합니다.

입력 이터레이터

입력 이터레이터는 컨테이너에서 데이터를 순차적으로 읽는 데 사용할 수 있는 이터레이터입니다. 두 개의 이터레이터를 비교하기 위한 ==!=, 항목에 저장된 값을 검색하기 위한 *, 다음 항목으로 진행하기 위한 ++ 접두사 등의 연산자를 제공해야 합니다.

Qt 컨테이너의 이터레이터 유형(const와 non-const)은 모두 입력 이터레이터입니다.

출력 이터레이터

출력 이터레이터는 컨테이너나 일부 출력 스트림에 데이터를 순차적으로 쓰는 데 사용할 수 있는 이터레이터입니다. 값을 쓰기 위한 * 단항 연산자(예: *it = val)와 다음 항목으로 넘어가기 위한 ++ 접두사 연산자를 제공해야 합니다.

Qt 컨테이너의 컨스트가 아닌 이터레이터 유형은 모두 출력 이터레이터입니다.

정방향 이터레이터

정방향 이 터레이터는 입력 이터레이터와 출력 이터레이터의 요구 사항을 모두 충족하는 이터레이터입니다.

Qt 컨테이너의 컨스트가 아닌 이터레이터 유형은 모두 정방향 이터레이터입니다.

양방향 이터레이터

양방향 이 터레이터는 정방향 이터레이터의 요구 사항을 충족하지만 역방향 이터레이터를 위한 접두사 -- 를 추가로 지원하는 이터레이터입니다.

Qt 컨테이너의 컨스트가 아닌 이터레이터 유형은 모두 양방향 이터레이터입니다.

랜덤 액세스 이터레이터

마지막 범주인 랜덤 액세스 이터레이터는 가장 강력한 이터레이터 유형입니다. 양방향 이터레이터의 모든 요구 사항을 지원하며 다음 연산을 지원합니다:

i += n반복자 in 위치만큼 전진시킵니다.
i -= n반복자 in 위치만큼 뒤로 이동
i + n 또는 n + i반복자보다 n 위치 앞의 항목에 대한 반복자를 반환합니다. i
i - n반복자보다 n 위치 뒤에 있는 항목에 대한 반복자를 반환합니다. i
i - j반복자 i 사이의 항목 수를 반환하고 j
i[n]와 동일 *(i + n)
i < j이터레이터 j 가 이터레이터 뒤에 오면 true 를 반환합니다. i

QList의 컨스트가 아닌 이터레이터 유형은 랜덤 액세스 이터레이터입니다.

컨테이너 클래스<QtGlobal>참조하세요 .

함수 문서

[constexpr noexcept] uint qCountLeadingZeroBits(quint16 v)

MSB에서 검색할 때 v 에서 연속되는 0 비트의 수를 반환합니다. 예를 들어, qCountLeadingZeroBits(quint16(1)은 15를 반환하고 qCountLeadingZeroBits(quint16(8)은 12를 반환합니다.

[constexpr noexcept] uint qCountLeadingZeroBits(quint32 v)

MSB에서 검색할 때 v 에서 연속되는 0 비트의 수를 반환합니다. 예를 들어, qCountLeadingZeroBits(quint32(1))는 31을 반환하고 qCountLeadingZeroBits(quint32(8))는 28을 반환합니다.

[constexpr noexcept] uint qCountLeadingZeroBits(quint64 v)

MSB에서 검색할 때 v 에서 연속되는 0 비트의 수를 반환합니다. 예를 들어, qCountLeadingZeroBits(quint64(1))는 63을 반환하고 qCountLeadingZeroBits(quint64(8))는 60을 반환합니다.

[constexpr noexcept] uint qCountLeadingZeroBits(quint8 v)

MSB에서 검색할 때 v 에서 연속되는 0 비트의 수를 반환합니다. 예를 들어, qCountLeadingZeroBits(quint8(1)은 7을 반환하고 qCountLeadingZeroBits(quint8(8)은 4를 반환합니다.

[constexpr noexcept] uint qCountTrailingZeroBits(quint8 v)

LSB에서 검색할 때 v 에서 연속되는 0 비트의 수를 반환합니다. 예를 들어, qCountTrailingZeroBits(1)은 0을 반환하고 qCountTrailingZeroBits(8)은 3을 반환합니다.

[constexpr noexcept] uint qCountTrailingZeroBits(quint16 v)

과부하가 걸린 기능입니다.

[constexpr noexcept] uint qCountTrailingZeroBits(quint32 v)

과부하가 걸린 기능입니다.

[constexpr noexcept] uint qCountTrailingZeroBits(quint64 v)

과부하가 걸린 기능입니다.

template <typename ForwardIterator> void qDeleteAll(ForwardIterator begin, ForwardIterator end)

C++ delete 연산자를 사용하여 범위 [begin, end)의 모든 항목을 삭제합니다. 항목 유형은 포인터 유형(예: QWidget *)이어야 합니다.

예시:

QList<Employee *> list;
list.append(new Employee("Blackpool", "Stephen"));
list.append(new Employee("Twist", "Oliver"));

qDeleteAll(list.begin(), list.end());
list.clear();

qDeleteAll()은 컨테이너에서 항목을 제거하지 않고 단지 delete 을 호출할 뿐입니다. 위의 예에서는 컨테이너에서 clear()를 호출하여 항목을 제거합니다.

이 함수는 QMapQHash 과 같은 연관 컨테이너에 저장된 항목을 삭제하는 데에도 사용할 수 있습니다. 이 함수는 각 컨테이너에 저장된 객체만 삭제되며 키로 사용된 객체는 삭제되지 않습니다.

forward iterators도 참조하세요 .

template <typename Container> void qDeleteAll(const Container &c)

이 함수는 오버로드된 함수입니다.

이는 qDeleteAll(c.start(), c.end())과 동일합니다.

[constexpr noexcept] uint qPopulationCount(quint8 v)

v 에 설정된 비트 수를 반환합니다. 이 숫자는 v 의 해밍 가중치라고도 합니다.

[constexpr noexcept] uint qPopulationCount(quint16 v)

과부하가 걸린 기능입니다.

[constexpr noexcept] uint qPopulationCount(quint32 v)

과부하가 걸린 기능입니다.

[constexpr noexcept] uint qPopulationCount(quint64 v)

과부하가 걸린 기능입니다.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.