C++ Academy · Les

Grenzen en subspans

Maak spans veilig deelverzamelingen

Les 4 van 413 stappen

Grenzen en subspans is een gratis C++ Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C++ Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C++ Academy bevat in totaal 4 lessen.

Segmenteren met subspan

s.subspan(offset, count) geeft een span over een deel van het origineel terug, zonder kopie: alleen een nieuwe pointer en lengte.

#include <iostream>
#include <span>
int main() {
    int buf[] = {0, 1, 2, 3, 4};
    std::span<int> s(buf, 5);
    auto mid = s.subspan(1, 3);
    for (int x : mid) std::cout << x << " ";
    std::cout << "\n"; // 1 2 3
}

first en last

first(n) en last(n) geven spans over de eerste of laatste n elementen.

#include <iostream>
#include <span>
int main() {
    int buf[] = {10, 20, 30, 40};
    std::span<int> s(buf, 4);
    auto f = s.first(2);
    auto l = s.last(2);
    std::cout << f[0] << " " << l[1] << "\n"; // 10 40
}

Subspans delen geheugen

Als je een subspan wijzigt, veranderen de oorspronkelijke gegevens mee, omdat ze naar dezelfde buffer wijzen.

#include <iostream>
#include <span>
int main() {
    int buf[] = {1, 1, 1, 1};
    std::span<int> s(buf, 4);
    auto tail = s.last(2);
    tail[0] = 99;
    std::cout << buf[2] << "\n"; // 99
}

size_bytes

size_bytes() geeft de totale grootte in bytes van de elementen van de span terug, wat handig is voor I/O op laag niveau.

#include <iostream>
#include <span>
int main() {
    int buf[] = {1, 2, 3};
    std::span<int> s(buf, 3);
    std::cout << s.size_bytes() << "\n"; // 3 * sizeof(int)
}

Bereikcontrole is jouw verantwoordelijkheid

operator[] op een span controleert de grenzen niet. s[s.size()] lezen is ongedefinieerd gedrag.

Controleer vóór het segmenteren

subspan aanroepen met een offset of aantal elementen dat groter is dan de span leidt tot ongedefinieerd gedrag. Controleer eerst tegen size().

#include <iostream>
#include <span>
int main() {
    int buf[] = {1, 2, 3};
    std::span<int> s(buf, 3);
    size_t off = 1, cnt = 2;
    if (off + cnt <= s.size()) {
        auto sub = s.subspan(off, cnt);
        std::cout << sub.size() << "\n";
    }
}

Leeg na het segmenteren

Segmenteren kan een lege span opleveren, bijvoorbeeld first(0); behandel die zoals elk leeg bereik.

#include <iostream>
#include <span>
int main() {
    int buf[] = {1, 2};
    std::span<int> s(buf, 2);
    auto e = s.first(0);
    std::cout << e.empty() << "\n"; // 1
}

Segmenten aan elkaar koppelen

Subspans kunnen verder worden gesegmenteerd, omdat elk ervan slechts een nieuwe weergave in de oorspronkelijke buffer is.

#include <iostream>
#include <span>
int main() {
    int buf[] = {0, 1, 2, 3, 4, 5};
    std::span<int> s(buf, 6);
    auto inner = s.subspan(1, 4).first(2);
    std::cout << inner[0] << " " << inner[1] << "\n"; // 1 2
}

Verwerken in stukken

Een veelgebruikt doel van subspan is een grote buffer doorlopen in vensters met een vaste grootte, voor streaming of verwerking in batches.

#include <iostream>
#include <span>
int main() {
    int buf[] = {1, 2, 3, 4, 5, 6};
    std::span<int> s(buf, 6);
    for (size_t i = 0; i < s.size(); i += 2) {
        auto chunk = s.subspan(i, 2);
        std::cout << "[" << chunk[0] << "," << chunk[1] << "] ";
    }
    std::cout << "\n";
}

Controles met statische omvang

Bij een span met statische omvang kan de compiler sommige segmentgroottes tijdens het compileren controleren, zodat fouten eerder worden gevonden.

De levensduur blijft van toepassing

Elke subspan deelt de levensduur van de oorspronkelijke buffer. Als de bron wordt vernietigd of opnieuw gealloceerd, worden alle afgeleide spans ongeldig.

Korte controle

Controleer je begrip van subspans en bereikgrenzen.

Samenvatting

Je hebt bereikgrenzen en subspans geleerd:

  • subspan, first en last maken segmenten zonder allocatie.
  • Subspans delen geheugen; wijzigingen beïnvloeden het origineel.
  • operator[] en segmenteren controleren de grenzen niet; controleer die eerst.
  • Alle subspans delen de levensduur van de bron.
Gratis beginnen

Leer C++ met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
51
Lessen
203

Veelgestelde vragen

Is de les “Grenzen en subspans” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad C++ Academy, waaronder “Grenzen en subspans”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus C++ Academy bevat in totaal 4 lessen.

Wat leer ik in “Grenzen en subspans”?

Maak spans veilig deelverzamelingen Je oefent met C++ Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met C++ Academy te beginnen?

Ervaring vooraf is niet nodig. C++ Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Grenzen en subspans”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over C++ Academy?

Ja. Elke les over C++ Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. std::array met vaste grootte
  2. Basisprincipes van std::span
  3. Spans doorgeven aan functies
  4. Grenzen en subspans
← Terug naar C++ Academy