Vanliga standardconcepts: integral och ranges
Använd standardbibliotekets concepts, till exempel integral och ranges::range
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 heltalstypstd::signed_integral— heltal med teckenstd::unsigned_integral— heltal utan teckenstd::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_comparablestd::totally_orderedstd::three_way_comparable
Objektkoncept
Vanliga krav:
std::movablestd::copyablestd::default_initializablestd::semiregularstd::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_iteratorstd::forward_iteratorstd::bidirectional_iteratorstd::random_access_iteratorstd::contiguous_iterator
Range-koncept (C++20)
Från <ranges>:
std::ranges::range— har begin/endstd::ranges::view— icke-ägande rangestd::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 →
regularellersemiregular
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.
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
- Varför concepts i stället för SFINAE
- Definiera concepts med requires
- Använda concepts i templates och auto
- Vanliga standardconcepts: integral och ranges