<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) |
(since 6.10) Result | qJoin(InputIterator first, InputIterator last, Result init, const Separator &separator = {}, Projection p = {}) |
| uint | qPopulationCount(quint8 v) |
| uint | qPopulationCount(quint16 v) |
| uint | qPopulationCount(quint32 v) |
| uint | qPopulationCount(quint64 v) |
상세 설명
Qt는 ` <QtAlgorithms> `에 컨테이너에서 작동하며 작업을 더 쉽게 만들어 주는 간단한 작업을 수행하는 여러 전역 템플릿 함수를 제공합니다. 예를 들어, ` qDeleteAll()`는 주어진 컨테이너나 주어진 범위의 모든 항목에 대해 ` operator delete `를 호출합니다. 이러한 알고리즘은 STL 스타일의 이터레이터를 제공하는 모든 컨테이너 클래스에서 사용할 수 있으며, 여기에는 Qt의 ` QList`, ` QMap`, ` QHash ` 클래스도 포함됩니다.
대부분의 알고리즘은 STL 스타일의 이터레이터를 매개변수로 받습니다. 이러한 알고리즘은 특정 이터레이터 클래스에 국한되지 않는다는 점에서 제네릭(generic)입니다. 즉, 특정 요구 사항을 충족하는 모든 이터레이터와 함께 사용할 수 있습니다.
알고리즘에 따라 허용하는 이터레이터에 대한 요구 사항이 다를 수 있습니다. 필요한 이터레이터 유형은 각 알고리즘별로 명시되어 있습니다. 잘못된 유형의 이터레이터가 전달될 경우(예를 들어, ` QList::ConstIterator `가 ` output iterator`로 전달되는 경우), 반드시 매우 명확한 오류 메시지는 아니더라도 항상 컴파일러 오류가 발생합니다.
일부 알고리즘은 컨테이너에 저장된 값 유형에 대해 특별한 요구 사항을 갖습니다. 예를 들어, ` qDeleteAll()`는 값 유형이 비const 포인터 유형(예: ` QWidget *`)이어야 합니다. 값 유형에 대한 요구 사항은 각 알고리즘마다 명시되어 있으며, 요구 사항이 충족되지 않으면 컴파일러에서 오류를 발생시킵니다.
제네릭 알고리즘은 Qt나 STL에서 제공하는 컨테이너 클래스 이외의 다른 컨테이너 클래스에서도 사용할 수 있습니다. STL 스타일 이터레이터의 구문은 C++ 포인터를 모델로 하고 있으므로, 일반 배열을 컨테이너로, 일반 포인터를 이터레이터로 사용할 수 있습니다.
이터레이터 유형
알고리즘은 허용하는 이터레이터 유형에 대해 특정 요구 사항을 가지고 있으며, 이는 각 함수별로 개별적으로 지정됩니다. 요구 사항이 충족되지 않으면 컴파일러에서 오류가 발생합니다.
입력 이터레이터
입력 이터레이터는 컨테이너에서 데이터를 순차적으로 읽는 데 사용할 수 있는 이터레이터입니다. 이터레이터는 두 이터레이터를 비교하기 위한 ` == ` 및 ` != ` 연산자, 항목에 저장된 값을 가져오기 위한 단항 ` * ` 연산자, 다음 항목으로 이동하기 위한 접두사 ` ++ ` 연산자를 제공해야 합니다.
Qt 컨테이너의 이터레이터 유형(const 및 non-const)은 모두 입력 이터레이터입니다.
출력 이터레이터
출력 이터레이터는 컨테이너나 출력 스트림에 데이터를 순차적으로 쓰기 위해 사용할 수 있는 이터레이터입니다. 이터레이터는 값을 쓰기 위한 단항 연산자 * (즉, *it = val)와 다음 항목으로 이동하기 위한 접두사 연산자 ++ 를 제공해야 합니다.
Qt 컨테이너의 비const 이터레이터 유형은 모두 출력 이터레이터입니다.
전방 이터레이터
전진 이터레이터는 입력 이터레이터와 출력 이터레이터 모두의 요구 사항을 충족하는 이터레이터입니다.
Qt 컨테이너의 비const 이터레이터 유형은 모두 전방 이터레이터입니다.
양방향 이터레이터
양방향 이터레이터는 전방 이터레이터의 요구 사항을 충족하면서도, 뒤로 반복하기 위한 접두사 -- 를 추가로 지원하는 이터레이터입니다.
Qt 컨테이너의 non-const 이터레이터 유형은 모두 양방향 이터레이터입니다.
임의 접근 이터레이터
마지막 범주인 랜덤 액세스 이터레이터는 가장 강력한 유형의 이터레이터입니다. 이터레이터는 양방향 이터레이터의 모든 요구 사항을 충족하며, 다음과 같은 연산을 지원합니다:
i += n | iterator i 를 n 위치만큼 앞으로 이동시킵니다 |
i -= n | 이테레이터 i 를 n 위치만큼 뒤로 이동시킵니다 |
i + n 또는 n + i | 이테레이터보다 n 위치 앞쪽에 있는 항목에 대한 이테레이터를 반환합니다 i |
i - n | 이테레이터보다 n 위치 뒤에 있는 항목에 대한 이테레이터를 반환합니다. i |
i - j | i 와 j |
i[n] | 다음과 동일합니다 *(i + n) |
i < j | iterator j 가 iterator보다 뒤에 있을 경우 true 을 반환합니다 i |
QList'의 비const 이터레이터 유형이 랜덤 액세스 이터레이터인 경우.
컨테이너 클래스 및 <QtGlobal>도 참조하십시오 .
함수 설명서
[constexpr noexcept] uint qCountLeadingZeroBits(quint16 v)
v 에서 MSB부터 검색했을 때 연속된 0 비트의 개수를 반환합니다. 예를 들어, qCountLeadingZeroBits(quint16(1))은 15를 반환하고, qCountLeadingZeroBits(quint16(8))은 12를 반환합니다.
[constexpr noexcept] uint qCountLeadingZeroBits(quint32 v)
v 에서 MSB부터 검색할 때 연속된 0 비트의 개수를 반환합니다. 예를 들어, qCountLeadingZeroBits(quint32(1))은 31을 반환하고, qCountLeadingZeroBits(quint32(8))은 28을 반환합니다.
[constexpr noexcept] uint qCountLeadingZeroBits(quint64 v)
v 에서 MSB부터 검색했을 때 연속된 0 비트의 개수를 반환합니다. 예를 들어, qCountLeadingZeroBits(quint64(1))은 63을 반환하고, qCountLeadingZeroBits(quint64(8))은 60을 반환합니다.
[constexpr noexcept] uint qCountLeadingZeroBits(quint8 v)
v 에서 MSB부터 검색했을 때 연속된 0 비트의 개수를 반환합니다. 예를 들어, qCountLeadingZeroBits(quint8(1))은 7을 반환하고, qCountLeadingZeroBits(quint8(8))은 4를 반환합니다.
[constexpr noexcept] uint qCountTrailingZeroBits(quint8 v)
v 에서 LSB부터 검색했을 때 연속된 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<QColor *> list;
list.append(new QColor(Qt::blue));
list.append(new QColor(Qt::yellow));
qDeleteAll(list.begin(), list.end());
list.clear();qDeleteAll()은 컨테이너에서 항목을 제거하는 것이 아니라, 해당 항목에 대해 delete 을 호출할 뿐이라는 점에 유의하십시오. 위의 예제에서는 컨테이너에 clear()를 호출하여 항목을 제거합니다.
이 함수는 QMap 및 QHash 과 같은 연관 컨테이너에 저장된 항목을 삭제하는 데에도 사용할 수 있습니다. 이 함수는 각 컨테이너에 저장된 객체만 삭제하며, 키로 사용되는 객체는 삭제되지 않습니다.
forward iterators도 참조하십시오 .
template <typename Container> void qDeleteAll(const Container &c)
이는 qDeleteAll(c.begin(), c.end())와 동일합니다.
이것은 오버로드된 함수입니다.
[since 6.10] template <
typename InputIterator,
typename Result,
typename Separator = Result,
typename Projection = std::identity
>
Result qJoin(InputIterator first, InputIterator last, Result init, const Separator &separator = {}, Projection p = {})
초기값 init 으로 시작하여, first 부터 last 까지의 범위 내 각 항목을 누적적으로 더합니다. 각 항목은 더하기 전에 p 투영 함수(기본값은 항등 함수)를 통해 매핑됩니다. 각 항목과 다음 항목 사이에는 선택 사항인 separator 가 추가됩니다. 예를 들어:
QList<int> l = {1, 2, 3};
QString res = qJoin(l.cbegin(), l.cend(), QString(), u" / ",
[](int n) { return QString::number(2 * n);});
// res == "2 / 4 / 6"참고: ` q20::identity `는 C++20의 ` std::identity의 C++17 백포트입니다.
이 함수는 Qt 6.10에서 도입되었습니다.
[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)
이것은 오버로드된 함수입니다.
© 2026 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.