Praktiska exempel
Tärningar, blandningar och urval
Praktiska exempel är en gratis lektion i C++ Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för C++ Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C++ Academy innehåller totalt 4 lektioner.
Kasta tärning
En sexsidig tärning är en uniform_int_distribution(1, 6) som matas med en seedad slumptalsgenerator.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(2026);
std::uniform_int_distribution<int> die(1, 6);
for (int i = 0; i < 5; ++i) std::cout << die(gen) << ' ';
std::cout << '\n';
return 0;
}Summera två tärningar
Att kasta två tärningar och summera dem ger det välkända intervallet 2 till 12, med en topp vid 7.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(1);
std::uniform_int_distribution<int> die(1, 6);
int total = die(gen) + die(gen);
std::cout << "two dice sum: " << total << '\n';
return 0;
}Kasta mynt
Ett rättvist mynt motsvarar en bernoulli_distribution(0.5). Räkna antalet krona efter många kast.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(7);
std::bernoulli_distribution coin(0.5);
int heads = 0;
for (int i = 0; i < 100; ++i) if (coin(gen)) ++heads;
std::cout << heads << " heads out of 100\n";
return 0;
}Blanda en kortlek
std::shuffle ordnar slumpmässigt om ett intervall med hjälp av Din slumptalsgenerator och är den moderna ersättaren för den borttagna random_shuffle.
#include <iostream>
#include <random>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> cards{1, 2, 3, 4, 5};
std::mt19937 gen(3);
std::shuffle(cards.begin(), cards.end(), gen);
for (int c : cards) std::cout << c << ' ';
std::cout << '\n';
return 0;
}Välja en slumpmässig vinnare
Välj ett element genom att generera ett slumpmässigt index inom intervallet.
#include <iostream>
#include <random>
#include <vector>
#include <string>
int main() {
std::vector<std::string> names{"Ann", "Ben", "Cara", "Dan"};
std::mt19937 gen(9);
std::uniform_int_distribution<int> pick(0, names.size() - 1);
std::cout << "winner: " << names[pick(gen)] << '\n';
return 0;
}Urval utan återläggning
std::sample väljer k olika element från ett intervall och passar därför perfekt för ett lotteri eller val av frågor i ett quiz.
#include <iostream>
#include <random>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> pool{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::vector<int> picked;
std::mt19937 gen(4);
std::sample(pool.begin(), pool.end(), std::back_inserter(picked), 3, gen);
for (int x : picked) std::cout << x << ' ';
std::cout << '\n';
return 0;
}Slumpmässiga lösenordstecken
Indexera en teckenuppsättning med en likformig fördelning för att bygga en slumpmässig sträng.
#include <iostream>
#include <random>
#include <string>
int main() {
const std::string chars = "abcdefghijklmnopqrstuvwxyz";
std::mt19937 gen(13);
std::uniform_int_distribution<int> pick(0, chars.size() - 1);
std::string pw;
for (int i = 0; i < 8; ++i) pw += chars[pick(gen)];
std::cout << pw << '\n';
return 0;
}Viktat val
std::discrete_distribution väljer index med angivna vikter, så att vanliga utfall förekommer oftare.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(6);
std::discrete_distribution<int> d{10, 1, 1}; // index 0 is heaviest
int counts[3] = {0};
for (int i = 0; i < 120; ++i) counts[d(gen)]++;
std::cout << counts[0] << ' ' << counts[1] << ' ' << counts[2] << '\n';
return 0;
}Simulera en slumpvandring
Ta slumpmässigt ett steg åt vänster eller höger och följ den slutliga positionen – en enkel stokastisk simulering.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(2);
std::bernoulli_distribution step(0.5);
int pos = 0;
for (int i = 0; i < 1000; ++i) pos += step(gen) ? 1 : -1;
std::cout << "final position: " << pos << '\n';
return 0;
}Kasta tills en sexa
Loopa tills en händelse inträffar för att modellera upprepade försök, här genom att räkna hur många kast som behövs för att få en sexa.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(15);
std::uniform_int_distribution<int> die(1, 6);
int rolls = 0;
while (die(gen) != 6) ++rolls;
std::cout << "extra rolls before a six: " << rolls << '\n';
return 0;
}Generera testdata
Med fördelningar kan Du snabbt fylla en vektor med slumpmässiga värden för att testa algoritmer.
#include <iostream>
#include <random>
#include <vector>
int main() {
std::mt19937 gen(21);
std::uniform_int_distribution<int> d(1, 50);
std::vector<int> data(5);
for (int& v : data) v = d(gen);
for (int v : data) std::cout << v << ' ';
std::cout << '\n';
return 0;
}Snabbkontroll
Testa om Du förstår praktisk användning av slumptal.
Sammanfattning
Du har tillämpat <random> i praktiken:
- tärningar, mynt och vinnare med likformiga fördelningar och bernoulli-fördelningar
std::shuffleför att ordna om element ochstd::sampleför urval utan återläggningdiscrete_distributionför viktade val samt simuleringar som slumpvandringar
Nu har Du en komplett verktygslåda för associativa behållare, hashning, fil-I/O och slumptal i C++.
Lär dig C++ med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 51
- Lektioner
- 203
Vanliga frågor
Är lektionen ”Praktiska exempel” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen C++ Academy, inklusive ”Praktiska exempel”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i C++ Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Praktiska exempel”?
Tärningar, blandningar och urval Ni övar på C++ Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig C++ Academy?
Du behöver inga förkunskaper. Utbildningen i C++ Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Praktiska exempel”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här C++ Academy-lektionen?
Ja. Varje C++ Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Slumptalsmotorer
- Fördelningar
- Initiering med rätt seed
- Praktiska exempel