QRandomGenerator Class

QRandomGenerator 클래스를 사용하면 고품질 난수 생성기에서 임의의 값을 얻을 수 있습니다. 더 보기...

Header: #include <QRandomGenerator>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
상속 대상:

QRandomGenerator64

참고: 이 클래스의 모든 함수는 재진입합니다.

참고: 이 함수는 스레드 안전합니다:

공용 유형

공용 함수

QRandomGenerator(quint32 seedValue = 1)
QRandomGenerator(const quint32 (&)[N] seedBuffer)
QRandomGenerator(std::seed_seq &sseq)
QRandomGenerator(const quint32 *begin, const quint32 *end)
QRandomGenerator(const quint32 *seedBuffer, qsizetype len)
QRandomGenerator(const QRandomGenerator &other)
double bounded(double highest)
int bounded(int highest)
qint64 bounded(qint64 highest)
quint32 bounded(quint32 highest)
quint64 bounded(quint64 highest)
int bounded(int lowest, int highest)
qint64 bounded(int lowest, qint64 highest)
qint64 bounded(qint64 lowest, int highest)
qint64 bounded(qint64 lowest, qint64 highest)
quint32 bounded(quint32 lowest, quint32 highest)
quint64 bounded(quint64 lowest, quint64 highest)
quint64 bounded(quint64 lowest, unsigned int highest)
quint64 bounded(unsigned int lowest, quint64 highest)
void discard(unsigned long long z)
void fillRange(UInt (&)[N] buffer)
void fillRange(UInt *buffer, qsizetype count)
quint64 generate64()
quint32 generate()
void generate(ForwardIterator begin, ForwardIterator end)
double generateDouble()
void seed(quint32 seed = 1)
void seed(std::seed_seq &seed)
QRandomGenerator::result_type operator()()

정적 공용 멤버

QRandomGenerator *global()
QRandomGenerator::result_type max()
QRandomGenerator::result_type min()
QRandomGenerator securelySeeded()
QRandomGenerator *system()
bool operator!=(const QRandomGenerator &rng1, const QRandomGenerator &rng2)

상세 설명

QRandomGenerator는 고품질 난수 생성기로부터 임의의 값을 생성하는 데 사용할 수 있습니다. C++ 난수 엔진과 마찬가지로 QRandomGenerator는 생성자를 통해 사용자가 제공한 값으로 시딩할 수 있습니다. 시딩되면 이 클래스에서 생성되는 숫자 시퀀스는 결정론적입니다. 즉, 동일한 시드 데이터가 주어지면 QRandomGenerator는 동일한 숫자 시퀀스를 생성합니다. 하지만 다른 시드가 주어지면 결과는 상당히 달라질 수 있습니다.

QRandomGenerator::securelySeeded()를 사용하여 QRandomGenerator::system()로 안전하게 시드된 QRandomGenerator를 생성할 수 있으므로 생성되는 숫자 순서를 쉽게 예측할 수 없습니다. 또한 QRandomGenerator::global()는 Qt가 안전하게 시딩되도록 보장하는 QRandomGenerator의 전역 인스턴스를 반환합니다. 이 객체는 스레드 안전하며 대부분의 용도로 공유할 수 있으며 항상 QRandomGenerator::system()에서 시딩됩니다.

QRandomGenerator::system()를 사용하여 시스템의 암호학적으로 안전한 랜덤 제너레이터에 액세스할 수 있습니다. 유닉스 시스템에서는 /dev/urandom 또는 getrandom() 또는 getentropy() 시스템 호출에서 읽는 것과 동일합니다.

이 클래스는 32비트 또는 64비트 수량을 생성하거나 배열을 채울 수 있습니다. 새 값을 생성하는 가장 일반적인 방법은 generate(), generate64() 또는 fillRange() 함수를 호출하는 것입니다. 로 사용하는 것입니다:

    quint32 value = QRandomGenerator::global()->generate();

또한 [0, 1) 범위(즉, 0을 포함하고 1을 제외)의 숫자를 반환하는 부동 소수점 함수 generateDouble()도 제공합니다. 또한 한정된 적분 범위에서 난수를 쉽게 구할 수 있는 일련의 편의 함수도 있습니다.

시딩 및 결정론

QRandomGenerator는 특정 시드 데이터로 시딩할 수 있습니다. 이렇게 하면 다음 예제에서와 같이 객체에서 생성되는 숫자는 항상 동일합니다:

    QRandomGenerator prng1(1234), prng2(1234);
    Q_ASSERT(prng1.generate() == prng2.generate());
    Q_ASSERT(prng1.generate64() == prng2.generate64());

시드 데이터는 하나 이상의 32비트 단어 형태를 취합니다. 이상적인 시드 크기는 QRandomGenerator 클래스 자체의 크기와 거의 같습니다. 시드 데이터의 혼합으로 인해 QRandomGenerator는 서로 다른 시드가 서로 다른 시퀀스를 생성한다고 보장할 수 없습니다.

QRandomGenerator::global()는 QRandomGenerator::securelySeeded()에서 생성된 모든 제너레이터와 마찬가지로 항상 QRandomGenerator::system()에서 시드되므로 동일한 시퀀스를 생성하도록 할 수 없습니다.

대량 데이터

결정론적 모드에서 작동하는 경우, QRandomGenerator를 대량 데이터 생성에 사용할 수 있습니다. 실제로 암호화 보안 또는 진정한 무작위 데이터가 필요하지 않은 애플리케이션은 무작위 데이터가 필요한 경우 QRandomGenerator::system() 대신 일반 QRandomGenerator를 사용하는 것이 좋습니다.

사용 편의성을 위해 QRandomGenerator는 다음 예제에서와 같이 쉽게 사용할 수 있는 전역 객체를 제공합니다:

    int x = QRandomGenerator::global()->generate();
    int y = QRandomGenerator::global()->generate();
    int w = QRandomGenerator::global()->bounded(16384);
    int h = QRandomGenerator::global()->bounded(16384);

시스템 전체 난수 생성기

QRandomGenerator::system()는 Qt가 실행되는 모든 시스템에서 암호학적으로 안전한 시스템 전체 난수 생성기에 액세스하는 데 사용할 수 있습니다. 이 함수는 가능한 경우 하드웨어 기능을 사용하여 난수를 생성합니다. 이러한 시스템에서 이러한 시설은 진정한 난수 생성기입니다. 그러나 진정한 난수 생성기라면 엔트로피 소스가 유한하기 때문에 엔트로피 풀이 소진되면 결과를 생성하지 못할 수도 있습니다.

그런 일이 발생하면 먼저 운영체제와 QRandomGenerator가 품질이 떨어지는 의사 난수 생성기로 폴백됩니다(Qt의 폴백 생성기가 가장 단순합니다). 이러한 제너레이터가 여전히 암호화 품질이 있는지 여부는 구현에 따라 정의됩니다. 따라서 엔트로피 풀이 비어 있지 않도록 QRandomGenerator::system()는 고빈도 난수 생성에 사용해서는 안 됩니다. 경험상 이 클래스는 초당 1킬로바이트 이상의 랜덤 데이터를 생성하는 데 호출해서는 안 됩니다(참고: 시스템마다 다를 수 있음).

애플리케이션에 실제 RNG 데이터가 대량으로 필요한 경우 운영 체제 기능(예: Linux의 경우 /dev/random )을 직접 사용하고 엔트로피를 사용할 수 있을 때까지 기다려야 합니다. 애플리케이션에 진정한 무작위성이 아닌 암호화 품질의 PRNG 엔진이 필요한 경우에도 QRandomGenerator::system()를 사용할 수 있습니다(아래 섹션 참조).

진정한 RNG나 암호적으로 안전한 PRNG가 모두 필요하지 않은 경우, 애플리케이션은 대신 QRandomGenerator의 결정론적 모드나 C++ 표준 라이브러리의 엔진과 같은 PRNG 엔진을 사용해야 합니다. QRandomGenerator::system()를 사용하여 시딩할 수 있습니다.

폴백 품질

QRandomGenerator::system()은 운영 체제 기능을 사용하여 난수를 얻고, 주변 환경에서 실제 엔트로피를 수집하여 진정한 난수를 생성하려고 시도합니다. 그러나 엔트로피 풀이 고갈될 수 있으며, 이 경우 운영 체제는 한동안 의사 난수 엔진으로 돌아갑니다. 어떤 경우에도 QRandomGenerator::system()는 더 많은 엔트로피가 수집될 때까지 기다리며 차단되지 않습니다.

다음 운영 체제는 엔트로피 풀이 모두 소진되더라도 무작위 생성 API의 결과가 최소한 암호학적으로 안전한 품질임을 보장합니다: Apple OS(다윈), BSD, Linux, Windows. 따라서 시스템 설치 문제(예: 현재 프로세스에서 /dev/urandom 를 읽을 수 없는 경우)를 제외하고 QRandomGenerator::system()는 동일한 보증을 받습니다.

다른 운영 체제에서 QRandomGenerator는 양호한 숫자 분포의 PRNG로 되돌아가지만 모든 경우에 적절한 시딩을 보장할 수는 없습니다. 자세한 내용은 OS 설명서를 참조하세요.

QRandomGenerator가 암호화되지 않은 품질의 생성기로 되돌아가지 않도록 해야 하는 애플리케이션은 운영 체제 설명서를 확인하거나 위 중 하나로 배포를 제한하는 것이 좋습니다.

재진입 및 스레드 안전

QRandomGenerator는 재진입이 가능하므로 여러 스레드가 서로 다른 객체에서 작동하는 한 이 클래스에서 동시에 작동할 수 있습니다. 여러 스레드가 하나의 PRNG 시퀀스를 공유해야 하는 경우 뮤텍스에 의한 외부 잠금이 필요합니다.

QRandomGenerator::global() 및 QRandomGenerator::system()에서 반환되는 객체는 예외입니다. 이러한 객체는 스레드 안전하며 외부 잠금 없이 모든 스레드에서 사용할 수 있습니다. 스레드 안전성은 이러한 객체를 복사하는 데까지 확장되지 않으므로 항상 참조로 사용해야 합니다.

표준 C++ 라이브러리 호환성

QRandomGenerator는 C++ 표준 라이브러리의 난수 엔진에 대한 요구 사항을 따라 모델링되었으며 표준 라이브러리 엔진이 사용할 수 있는 거의 모든 컨텍스트에서 사용할 수 있습니다. 요구 사항의 예외는 다음과 같습니다:

  • QRandomGenerator는 std::seed_seq 자체 외에 다른 시드 시퀀스와 유사한 클래스에서 시드를 지원하지 않습니다;
  • QRandomGenerator는 std::ostream 또는 std::istream 과 비교할 수 없거나(하지만 복사 가능) 스트리밍할 수 없습니다.

QRandomGenerator는 균등 분포 클래스 std::uniform_int_distributionstd:uniform_real_distribution, 그리고 무료 함수 std::generate_canonical 와도 호환됩니다. 예를 들어, 다음 코드를 사용하여 [1, 2.5) 범위의 부동 소수점 숫자를 생성할 수 있습니다:

    std::uniform_real_distribution dist(1, 2.5);
    return dist(*QRandomGenerator::global());

QRandomGenerator64도 참조하십시오 .

멤버 유형 문서

QRandomGenerator::result_type

operator()가 반환하는 타입에 대한 타입 정의입니다. 즉, quint32입니다.

operator()도 참조하세요 .

멤버 함수 문서

qint64 QRandomGenerator::bounded(int lowest, qint64 highest)

qint64 QRandomGenerator::bounded(qint64 lowest, int highest)

quint64 QRandomGenerator::bounded(quint64 lowest, unsigned int highest)

quint64 QRandomGenerator::bounded(unsigned int lowest, quint64 highest)

이 함수는 과부하 함수입니다.

이 함수는 매개변수의 유형이 정확히 일치하지 않을 때 과부하 해결을 돕기 위해 존재합니다. 작은 유형을 큰 유형의 유형으로 승격하고 올바른 과부하를 호출합니다.

QRandomGenerator::QRandomGenerator(quint32 seedValue = 1)

seedValue 값을 시드로 사용하여 이 QRandomGenerator 객체를 초기화합니다. 동일한 시드 값으로 생성되거나 다시 시드된 두 개체는 동일한 숫자 시퀀스를 생성합니다.

seed() 및 securelySeeded()도 참조하세요 .

template <qsizetype N> QRandomGenerator::QRandomGenerator(const quint32 (&)[N] seedBuffer)

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

seedBuffer 배열에서 찾은 값을 시드로 사용하여 이 QRandomGenerator 객체를 초기화합니다. 동일한 시드 값으로 생성되거나 다시 시드된 두 개체는 동일한 숫자 시퀀스를 생성합니다.

seed() 및 securelySeeded()도 참조하세요 .

[noexcept] QRandomGenerator::QRandomGenerator(std::seed_seq &sseq)

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

시드 시퀀스 sseq 를 시드로 사용하여 이 QRandomGenerator 객체를 초기화합니다. 동일한 시드 값으로 생성되거나 다시 시드된 두 개체는 동일한 숫자 시퀀스를 생성합니다.

seed() 및 securelySeeded()도 참조하세요 .

QRandomGenerator::QRandomGenerator(const quint32 *begin, const quint32 *end)

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

begin ~ end 범위에서 찾은 값을 시드로 사용하여 이 QRandomGenerator 객체를 초기화합니다. 동일한 시드 값으로 생성되거나 다시 시드된 두 개의 객체는 동일한 숫자 시퀀스를 생성합니다.

이 생성자는 다음과 같습니다:

    std::seed_seq sseq(begin, end);
    QRandomGenerator generator(sseq);

seed() 및 securelySeeded()도 참조하세요 .

QRandomGenerator::QRandomGenerator(const quint32 *seedBuffer, qsizetype len)

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

seedBuffer 배열에 있는 len 값을 시드로 사용하여 이 QRandomGenerator 객체를 초기화합니다. 동일한 시드 값으로 생성되거나 다시 시드된 두 개의 객체는 동일한 숫자 시퀀스를 생성합니다.

이 생성자는 다음과 같습니다:

    std::seed_seq sseq(seedBuffer, seedBuffer + len);
    QRandomGenerator generator(sseq);

seed() 및 securelySeeded()도 참조하세요 .

QRandomGenerator::QRandomGenerator(const QRandomGenerator &other)

other 객체에 생성기 상태의 복사본을 만듭니다. otherQRandomGenerator::system() 또는 그 복사본인 경우 이 객체는 운영 체제의 무작위 생성 기능에서도 읽습니다. 이 경우 두 객체에서 생성되는 시퀀스는 서로 다릅니다.

다른 모든 경우에는 새 QRandomGenerator 객체는 other 객체와 결정론적 시퀀스의 동일한 위치에서 시작됩니다. 이 시점부터 두 객체 모두 동일한 시퀀스를 생성합니다.

따라서 QRandomGenerator::global()의 복사본을 만드는 것은 바람직하지 않습니다. 독점적인 결정론적 생성기가 필요한 경우 대신 securelySeeded()를 사용하여 QRandomGenerator::global()와 관계를 공유하지 않는 새 객체를 얻는 것을 고려하세요.

double QRandomGenerator::bounded(double highest)

0(포함)과 highest (제외) 사이의 범위에서 임의의 2배를 하나 생성합니다. 이 함수는 다음과 동일하며 다음과 같이 구현됩니다:

    return generateDouble() * highest;

highest 매개변수가 음수이면 결과도 음수가 되고, 무한대 또는 NaN이면 결과도 무한대 또는 NaN이 됩니다(즉, 무작위가 아님).

generateDouble() 및 bounded()도 참조하세요 .

int QRandomGenerator::bounded(int highest)

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

0(포함)과 highest (제외) 사이의 범위에서 임의의 32비트 수량을 하나 생성합니다. highest 은 양수여야 합니다.

이 함수는 전체 32비트 범위의 값을 얻는 데 사용할 수 없습니다. 대신 generate()를 사용하고 int로 형변환합니다.

generate(), generate64() 및 generateDouble()도 참조하세요 .

qint64 QRandomGenerator::bounded(qint64 highest)

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

0(포함)과 highest (제외) 사이의 범위에서 임의의 64비트 수량을 하나 생성합니다. highest 은 양수여야 합니다.

이 함수는 qint64 의 전체 64비트 범위의 값을 구하는 데 사용할 수 없습니다. 대신 generate64()를 사용하여 qint64로 캐스팅하거나 이 함수의 부호 없는 버전을 사용하세요.

참고: 이 함수는 루프로 구현되므로 얻은 임의의 값에 따라 달라집니다. 장기적으로는 평균적으로 2회 미만으로 반복되어야 하지만 무작위 생성기에 결함이 있는 경우 이 함수를 실행하는 데 시간이 상당히 오래 걸릴 수 있습니다.

generate(), generate64() 및 generateDouble()도 참조하세요 .

quint32 QRandomGenerator::bounded(quint32 highest)

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

0(포함)에서 highest (제외) 사이의 범위에서 임의의 32비트 수량을 하나 생성합니다. 매개변수 0과 를 사용하여 동일한 결과를 얻을 수도 있습니다. std::uniform_int_distribution 를 매개변수 0 및 highest - 1 과 함께 사용하여 동일한 결과를 얻을 수도 있습니다. 이 클래스는 32비트보다 큰 수량을 구하는 데에도 사용할 수 있으며 64비트의 경우 64비트 bounded() 오버로드도 사용할 수 있습니다.

예를 들어 0에서 255(포함) 사이의 값을 얻으려면 다음과 같이 작성하면 됩니다:

    quint32 v = QRandomGenerator::global()->bounded(256);

물론 generate()의 결과를 하위 8비트로만 마스킹하여 동일한 결과를 얻을 수도 있습니다. 두 솔루션 모두 똑같이 효율적입니다.

이 함수는 전체 32비트 범위의 값을 쿼트32로 구하는 데는 사용할 수 없습니다. 대신 generate()를 사용하세요.

generate(), generate64() 및 generateDouble()도 참조하세요 .

quint64 QRandomGenerator::bounded(quint64 highest)

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

0(포함)에서 highest (제외) 사이의 범위에서 임의의 64비트 수량을 하나 생성합니다. 파라미터 0과 를 사용하여 동일한 결과를 얻을 수도 있습니다. std::uniform_int_distribution<quint64> 를 매개변수 0 및 highest - 1 과 함께 사용하여 동일한 결과를 얻을 수도 있습니다.

이 함수는 quint64 의 전체 64비트 범위의 값을 얻는 데는 사용할 수 없습니다. 대신 generate64()를 사용하세요.

참고: 이 함수는 루프로 구현되며 얻은 임의의 값에 따라 달라집니다. 장기적으로는 평균적으로 2회 미만으로 반복되어야 하지만 무작위 생성기에 결함이 있는 경우 이 함수를 실행하는 데 시간이 상당히 오래 걸릴 수 있습니다.

generate(), generate64() 및 generateDouble()도 참조하세요 .

int QRandomGenerator::bounded(int lowest, int highest)

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

lowest (포함)과 highest (제외) 사이의 범위에서 임의의 32비트 수량을 하나 생성합니다(둘 다 음수일 수 있지만 highestlowest 보다 커야 함).

이 함수는 전체 32비트 범위의 값을 얻는 데 사용할 수 없습니다. 대신 generate()를 사용하고 int로 형변환하세요.

generate(), generate64() 및 generateDouble()도 참조하십시오 .

qint64 QRandomGenerator::bounded(qint64 lowest, qint64 highest)

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

lowest (포함)과 highest (제외) 사이의 범위에서 임의의 64비트 양을 하나 생성하며, 둘 다 음수일 수 있지만 highestlowest 보다 커야 합니다.

이 함수는 qint64 의 전체 64비트 범위의 값을 구하는 데 사용할 수 없습니다. 대신 generate64()를 사용하고 qint64로 캐스팅하세요.

참고: 이 함수는 루프로 구현되므로 얻은 임의의 값에 따라 달라집니다. 장기적으로는 평균적으로 2회 미만으로 반복되어야 하지만 난수 생성기에 결함이 있는 경우 이 함수를 실행하는 데 시간이 상당히 오래 걸릴 수 있습니다.

generate(), generate64() 및 generateDouble()도 참조하세요 .

quint32 QRandomGenerator::bounded(quint32 lowest, quint32 highest)

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

lowest (포함)에서 highest (제외) 사이의 범위에서 임의의 32비트 수량을 하나 생성합니다. highest 매개 변수는 lowest 보다 커야 합니다.

매개 변수 std::uniform_int_distribution 와 함께 lowest\a highest - 1 을 사용하여 동일한 결과를 얻을 수도 있습니다. 이 클래스는 32비트보다 큰 수량을 얻는 데에도 사용할 수 있습니다.

예를 들어 1000(포함)과 2000(제외) 사이의 값을 얻으려면 다음과 같이 작성합니다:

    quint32 v = QRandomGenerator::global()->bounded(1000, 2000);

이 함수는 전체 32비트 범위인 quint32의 값을 구하는 데는 사용할 수 없습니다. 대신 generate()를 사용하십시오.

generate(), generate64() 및 generateDouble()도 참조하세요 .

quint64 QRandomGenerator::bounded(quint64 lowest, quint64 highest)

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

lowest (포함)에서 highest (제외) 사이의 범위에서 임의의 64비트 수량을 하나 생성합니다. highest 매개 변수는 lowest 보다 커야 합니다.

매개 변수 std::uniform_int_distribution<quint64>lowest\a highest - 1 매개변수와 함께 사용해도 동일한 결과를 얻을 수 있습니다.

이 함수는 quint64 의 전체 64비트 범위의 값을 구하는 데는 사용할 수 없습니다. 대신 generate64()를 사용하세요.

참고: 이 함수는 루프로 구현되며 얻은 임의의 값에 따라 달라집니다. 장기적으로는 평균적으로 2회 미만으로 반복되어야 하지만 무작위 생성기에 결함이 있는 경우 이 함수를 실행하는 데 시간이 상당히 오래 걸릴 수 있습니다.

generate(), generate64() 및 generateDouble()도 참조하세요 .

void QRandomGenerator::discard(unsigned long long z)

시퀀스에서 다음 z 항목을 삭제합니다. 이 메서드는 generate() z 을 여러 번 호출하고 결과를 버리는 것과 동일합니다:

    while (z--)
        generator.generate();

template <typename UInt, size_t N, QRandomGenerator::IfValidUInt<UInt> = true> void QRandomGenerator::fillRange(UInt (&)[N] buffer)

N 32비트 또는 64비트 수량(유형에 따라 UInt)을 생성하여 buffer 배열에 저장합니다. 이 방법은 난수 생성기 소스에 대한 호출 횟수를 줄여주므로 한 번에 두 개 이상의 수량을 얻을 수 있는 가장 효율적인 방법입니다.

예를 들어 두 개의 32비트 수량을 채우려면 한 번만 쓰면 됩니다:

    quint32 array[2];
    QRandomGenerator::global()->fillRange(array);

generate64()를 한 번 호출한 다음 64비트 값의 두 절반을 분할하는 방법도 가능합니다.

generate()도 참조하세요 .

template <typename UInt, QRandomGenerator::IfValidUInt<UInt> = true> void QRandomGenerator::fillRange(UInt *buffer, qsizetype count)

count 32비트 또는 64비트 수량(유형에 따라 UInt)을 생성하고 buffer 이 가리키는 버퍼에 저장합니다. 이 방법은 난수 생성기 소스에 대한 호출 횟수를 줄여주므로 한 번에 두 개 이상의 수량을 얻을 수 있는 가장 효율적인 방법입니다.

예를 들어 16개 항목의 목록을 임의의 값으로 채우려면 다음과 같이 작성할 수 있습니다:

    QList<quint32> list;
    list.resize(16);
    QRandomGenerator::global()->fillRange(list.data(), list.size());

generate()도 참조하세요 .

quint64 QRandomGenerator::generate64()

64비트 난수를 생성하여 반환합니다.

operator()() 및 generate()도 참조하세요 .

quint32 QRandomGenerator::generate()

32비트 난수를 생성하여 반환합니다.

operator()() 및 generate64()도 참조하세요 .

template <typename ForwardIterator> void QRandomGenerator::generate(ForwardIterator begin, ForwardIterator end)

32비트 수량을 생성하여 beginend 사이의 범위에 저장합니다. 이 함수는 다음과 동일하며 다음과 같이 구현됩니다:

    std::generate(begin, end, [this]() { return generate(); });

이 함수는 부호 없는 32비트 정수가 필요한 함수 std::seed_seq::generate함수의 요구 사항을 준수하며, 부호 없는 32비트 정수 값이 필요합니다.

시작, 끝) 범위가 요소당 32비트 이상을 저장할 수 있는 영역을 가리키는 경우 요소는 여전히 32비트 데이터로만 초기화됩니다. 다른 비트는 0이 됩니다. 범위를 64비트 수량으로 채우려면 쓸 수 있습니다:

    std::generate(begin, end, []() { return QRandomGenerator::global()->generate64(); });

범위가 배열이나 QList)의 데이터와 같이 인접한 메모리를 참조하는 경우 fillRange() 함수도 사용할 수 있습니다.

fillRange()도 참조하세요 .

double QRandomGenerator::generateDouble()

표준 범위 [0, 1)(즉, 0을 포함하고 1을 제외)에서 임의의 큐리얼 하나를 생성합니다.

이 함수는 다음과 같습니다:

    QRandomGenerator64 rd;
    return std::generate_canonical<qreal, std::numeric_limits<qreal>::digits>(rd);

매개변수 0과 1을 사용하여 std::uniform_real_distribution 를 사용하여도 동일하게 얻을 수 있습니다.

generate(), generate64() 및 bounded()도 참조하세요 .

[static] QRandomGenerator *QRandomGenerator::global()

securelySeeded()를 사용하여 시드된 공유 QRandomGenerator 포인터를 반환합니다. 이 함수는 특정 용도를 위해 안전하게 시딩된 QRandomGenerator 을 생성하거나 다소 큰 QRandomGenerator 객체를 저장하지 않고 임의의 데이터를 생성하는 데 사용해야 합니다.

예를 들어 다음은 임의의 RGB 색상을 생성합니다:

    return QColor::fromRgb(QRandomGenerator::global()->generate());

이 객체에 대한 액세스는 스레드에 안전하므로 잠금 없이 모든 스레드에서 사용할 수 있습니다. 또한 이 객체를 복사할 수 있으며 복사된 객체가 생성하는 시퀀스는 공유 객체가 생성하는 시퀀스와 동일합니다. 그러나 글로벌 객체에 액세스하는 다른 스레드가 있는 경우 해당 스레드가 예측할 수 없는 간격으로 샘플을 가져올 수 있다는 점에 유의하세요.

참고: 이 함수는 스레드에 안전합니다.

securelySeeded() 및 system()도 참조하세요 .

[static constexpr] QRandomGenerator::result_type QRandomGenerator::max()

QRandomGenerator 에서 생성할 수 있는 최대값을 반환합니다. 즉, std::numeric_limits<result_type>::max() 입니다.

min() 및 QRandomGenerator64::max()도 참조하세요 .

[static constexpr] QRandomGenerator::result_type QRandomGenerator::min()

QRandomGenerator 가 생성할 수 있는 최소값을 반환합니다. 즉, 0입니다.

max() 및 QRandomGenerator64::min()도 참조하세요 .

[static] QRandomGenerator QRandomGenerator::securelySeeded()

QRandomGenerator::system()로 안전하게 시드된 새 QRandomGenerator 객체를 반환합니다. 이 함수는 QRandomGenerator 에서 사용하는 알고리즘에 이상적인 시드 크기를 가져오므로 당분간 보관할 새 QRandomGenerator 객체를 만드는 데 권장되는 방법입니다.

결정론적 엔진을 안전하게 시드하는 데 필요한 데이터의 양을 고려할 때 이 함수는 다소 비싸므로 QRandomGenerator (2600바이트 미만의 임의 데이터를 생성하는 데 사용하는 것은 사실상 리소스 낭비입니다)의 단기 사용에는 사용해서는 안 됩니다. 그렇게 많은 데이터가 필요하지 않은 경우에는 QRandomGenerator::global() 대신 QRandomGenerator 객체를 저장하지 말고 사용하는 것이 좋습니다.

global() 및 system()도 참조하세요 .

void QRandomGenerator::seed(quint32 seed = 1)

seed 값을 시드로 사용하여 이 개체를 다시 시드합니다.

[noexcept] void QRandomGenerator::seed(std::seed_seq &seed)

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

시드 시퀀스 seed 를 시드로 사용하여 이 객체를 다시 시드합니다.

[static] QRandomGenerator *QRandomGenerator::system()

운영 체제에서 제공하는 기능을 사용하여 항상 난수를 생성하는 공유 QRandomGenerator 에 대한 포인터를 반환합니다. 시스템 기능은 최소한 다음 운영 체제에서 암호학적으로 안전한 것으로 간주됩니다: Apple OS(다윈), BSD, Linux, Windows. 다른 운영 체제에서도 마찬가지일 수 있습니다.

또한 실제 하드웨어 난수 생성기에 의해 지원될 수도 있습니다. 따라서 이 함수가 반환하는 QRandomGenerator 을 대량 데이터 생성에 사용해서는 안 됩니다. 대신 QRandomGenerator 또는 <random> 헤더의 무작위 엔진을 시딩하는 데 사용하세요.

이 함수가 반환하는 객체는 스레드에 안전하며 잠금 없이 모든 스레드에서 사용할 수 있습니다. 또한 복사할 수 있으며 그 결과 QRandomGenerator 역시 운영 체제 기능에 액세스할 수 있지만 동일한 시퀀스를 생성하지는 않습니다.

참고: 이 함수는 스레드에 안전합니다.

securelySeeded() 및 global()도 참조하세요 .

QRandomGenerator::result_type QRandomGenerator::operator()()

32비트 난수를 생성하여 반환합니다.

generate() 및 generate64()도 참조하세요 .

관련 비회원

bool operator!=(const QRandomGenerator &rng1, const QRandomGenerator &rng2)

두 엔진 rng1rng2 이 서로 다른 상태이거나 하나는 운영 체제 기능에서 읽고 있고 다른 하나는 그렇지 않은 경우 true 을 반환하고, 그렇지 않은 경우 false 을 반환합니다.

© 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.