C++ Academy · Lektion

Vanliga standardconcepts: integral och ranges

Använd standardbibliotekets concepts, till exempel integral och ranges::range

Lektion 4 av 414 steg

Vanliga standardconcepts: integral och ranges ä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.

Standardbiblioteket för koncept

C++20 introducerade många standardkoncept i <concepts> och <ranges>. Genom att känna till dem slipper ni skriva egna koncept.

Kärnspråkskoncept

De grundläggande koncepten:

  • std::same_as<T, U>
  • std::derived_from<T, U>
  • std::convertible_to<T, U>
  • std::common_with<T, U>
  • std::assignable_from<T, U>

Aritmetiska koncept

Begränsa till numeriska typer:

  • std::integral — valfri heltalstyp
  • std::signed_integral — heltal med tecken
  • std::unsigned_integral — heltal utan tecken
  • std::floating_point — float, double, long double
template <std::floating_point T>
T mean(T a, T b) { return (a + b) / 2; }

Jämförelsekoncept

Begränsa typer för likhet och ordning:

  • std::equality_comparable
  • std::totally_ordered
  • std::three_way_comparable

Objektkoncept

Vanliga krav:

  • std::movable
  • std::copyable
  • std::default_initializable
  • std::semiregular
  • std::regular
template <std::regular T>
class Container { /* full-fledged value type */ };

Anropbara koncept

För funktioner och funktorer:

  • std::invocable<F, Args...>
  • std::regular_invocable<F, Args...>
  • std::predicate<F, Args...>
template <std::invocable<int> F>
void apply_to_42(F&& f) {
    std::forward<F>(f)(42);
}

Iterator-koncept

I <iterator>:

  • std::input_iterator
  • std::forward_iterator
  • std::bidirectional_iterator
  • std::random_access_iterator
  • std::contiguous_iterator

Range-koncept (C++20)

Från <ranges>:

  • std::ranges::range — har begin/end
  • std::ranges::view — icke-ägande range
  • std::ranges::sized_range — kan hämta sin storlek i O(1)
  • std::ranges::random_access_range
template <std::ranges::range R>
auto first(R&& r) {
    return *std::ranges::begin(r);
}

Kombinera koncept

Kombinera koncept för att uttrycka precisa krav.

template <std::ranges::random_access_range R>
    requires std::integral<std::ranges::range_value_t<R>>
auto sum(const R& r) {
    return std::reduce(std::ranges::begin(r), std::ranges::end(r));
}

Egna koncept ovanpå standardkoncept

Bygg domänspecifika koncept ovanpå standardkoncept.

template <typename T>
concept Number = std::integral<T> || std::floating_point<T>;

Algoritmer baserade på koncept

C++20-algoritmerna för ranges är i stor utsträckning begränsade av koncept. När en olämplig typ skickas in anger felmeddelandena direkt vilket koncept som inte uppfylldes.

Snabbreferens

Använd inbyggda koncept när det är möjligt:

  • Tal → integral / floating_point
  • Iteration → ranges::range
  • Anropbara objekt → invocable / predicate
  • Värdetyp → regular eller semiregular

Snabb kontroll

Vilket standardkoncept beskriver en typ som har både begin() och end()?

Sammanfattning

Standardbiblioteket innehåller omfattande konceptbibliotek: aritmetiska (integral, floating_point), jämförbara (equality_comparable), objekt (movable, regular), anropbara, iterator- och range-koncept. Använd dem som grund för era egna begränsningar.

Gratis att börja

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 ”Vanliga standardconcepts: integral och ranges” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen C++ Academy, inklusive ”Vanliga standardconcepts: integral och ranges”, 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 ”Vanliga standardconcepts: integral och ranges”?

Använd standardbibliotekets concepts, till exempel integral och ranges::range 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 ”Vanliga standardconcepts: integral och ranges”?

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

  1. Varför concepts i stället för SFINAE
  2. Definiera concepts med requires
  3. Använda concepts i templates och auto
  4. Vanliga standardconcepts: integral och ranges
← Tillbaka till C++ Academy