C++ Academy · Oppitunti

Yleiset standardiconceptit: integral, Ranges

Käytä standardikirjaston concept-tyyppejä, kuten integral ja ranges::range.

Oppitunti 4/414 vaihetta

Yleiset standardiconceptit: integral, Ranges on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu C++ Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C++ Academy-kurssilla on yhteensä 4 oppituntia.

Standardikonseptikirjasto

C++20 toi käyttöön monia standardikonsepteja otsakkeissa <concepts> ja <ranges>. Niiden tunteminen vähentää omien konseptien kirjoittamisen tarvetta.

Kielen ydinkonseptit

Perustavanlaatuiset konseptit:

  • 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>

Aritmeettiset konseptit

Rajoita tyypit numeerisiin tyyppeihin:

  • std::integral — mikä tahansa kokonaislukutyyppi
  • std::signed_integral — etumerkillinen kokonaisluku
  • std::unsigned_integral — etumerkitön kokonaisluku
  • std::floating_point — float, double tai long double
template <std::floating_point T>
T mean(T a, T b) { return (a + b) / 2; }

Vertailukonseptit

Rajoita tyyppejä yhtäsuuruuden ja järjestyksen vertailua varten:

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

Oliokonseptit

Yleisiä vaatimuksia:

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

Kutsuttavuuskonseptit

Funktioita ja funktoriolioita varten:

  • 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);
}

Iteraattorikonseptit

Otsakkeessa <iterator>:

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

Range-konseptit (C++20)

Otsakkeesta <ranges>:

  • std::ranges::range — sisältää begin- ja end-operaatiot
  • std::ranges::view — omistamaton range
  • std::ranges::sized_range — tuntee kokonsa ajassa O(1)
  • std::ranges::random_access_range
template <std::ranges::range R>
auto first(R&& r) {
    return *std::ranges::begin(r);
}

Konseptien yhdistäminen

Yhdistä konsepteja täsmällisten vaatimusten ilmaisemiseksi.

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));
}

Omien konseptien rakentaminen

Rakenna toimialakohtaisia konsepteja standardikonseptien päälle.

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

Konsepteihin perustuvat algoritmit

C++20:n ranges-algoritmeja rajoitetaan voimakkaasti konsepteilla. Kun annat sopimattoman tyypin, niiden virheilmoitukset kertovat suoraan, mikä konsepti ei täyttynyt.

Pikaopas

Käytä valmiita konsepteja aina kun mahdollista:

  • Luvut → integral / floating_point
  • Iterointi → ranges::range
  • Kutsuttavat oliot → invocable / predicate
  • Arvotyyppi → regular tai semiregular

Pikatarkistus

Mikä standardikonsepti kuvaa tyyppiä, jolla on sekä begin() että end()?

Kertaus

Standardikirjasto sisältää monipuoliset konseptikirjastot: aritmeettiset (integral, floating_point), vertailukelpoiset (equality_comparable), oliokonseptit (movable, regular) sekä kutsuttavuus-, iteraattori- ja range-konseptit. Käytä niitä omien rajoitteidesi perustana.

Aloita maksutta

Opi C++ tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
51
Oppitunnit
203

Usein kysytyt kysymykset

Onko oppitunti ”Yleiset standardiconceptit: integral, Ranges” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “Yleiset standardiconceptit: integral, Ranges”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. C++ Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Yleiset standardiconceptit: integral, Ranges”?

Käytä standardikirjaston concept-tyyppejä, kuten integral ja ranges::range. Harjoittelet C++ Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C++ Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C++ Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Yleiset standardiconceptit: integral, Ranges”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C++ Academy-oppitunnilla?

Kyllä. Jokainen C++ Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Miksi concepts eikä SFINAE
  2. Conceptien määrittely requires-lausekkeilla
  3. Conceptien käyttö malleissa ja autossa
  4. Yleiset standardiconceptit: integral, Ranges
← Takaisin: C++ Academy