C++ Academy · leksjon

Hvorfor string_view

Unngå kopiering av strenger

Leksjon 1 av 413 trinn

Hvorfor string_view er en gratis leksjon i C++ Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C++ Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C++ Academy inneholder totalt 4 leksjoner.

Kostnaden ved kopier

Når std::string sendes som verdi, kopieres hele bufferen. Ved lesetilgang er denne kopieringen bortkastet arbeid. std::string_view er en lettvekts-view uten eierskap – bare en peker og en lengde. Inkluder <string_view>.

#include <iostream>
#include <string_view>
int main() {
    std::string_view sv = "hello";
    std::cout << sv << " len=" << sv.size() << "\n";
}

Hva en view inneholder

En string_view lagrer bare en peker til eksisterende tegn og en lengde. Den eier eller kopierer ikke dataene.

#include <iostream>
#include <string>
#include <string_view>
int main() {
    std::string s = "world";
    std::string_view sv = s; // views s, no copy
    std::cout << sv << "\n";
}

Parametere som bare leses

Når De tar imot std::string_view, fungerer funksjonen med std::string, strengliteraler og char-arrayer uten å kopiere noen av dem.

#include <iostream>
#include <string_view>
void greet(std::string_view name) {
    std::cout << "Hi, " << name << "\n";
}
int main() {
    greet("Ada");
    greet(std::string("Bob"));
}

Ingen allokering

Det å opprette en view allokerer aldri minne, så den er billig å kopiere og sende rundt som verdi.

#include <iostream>
#include <string_view>
int main() {
    std::string_view a = "constant text";
    std::string_view b = a; // trivial copy
    std::cout << (a == b) << "\n";
}

Rimelige delstrenger

substr på en view returnerer en annen view inn i det samme minnet; ingen tegn kopieres.

#include <iostream>
#include <string_view>
int main() {
    std::string_view sv = "abcdef";
    std::cout << sv.substr(2, 3) << "\n"; // cde
}

Ytelsesintensjon ved sammenligning

For funksjoner som bare undersøker tekst, unngår string_view både heap-allokering og kopiering. Det har betydning i løkker som kjører ofte og ved analyse.

Lengde og indeksering

En view støtter det velkjente grensesnittet: size(), empty(), indeksering og områdebasert iterasjon.

#include <iostream>
#include <string_view>
int main() {
    std::string_view sv = "C++";
    for (char c : sv) std::cout << c << "-";
    std::cout << "\n" << sv.size() << "\n";
}

Views er skrivebeskyttede

De kan ikke endre tegn gjennom en string_view; den gir bare lesetilgang. For å endre teksten trenger De den eierende strengen.

Fra literal til view

Strengliteraler konverteres direkte til views, noe som gjør det svært rimelig å sende konstant tekst.

#include <iostream>
#include <string_view>
using namespace std::string_view_literals;
int main() {
    auto sv = "literal"sv;
    std::cout << sv.size() << "\n";
}

Ikke en erstatning for string

Bruk std::string når De trenger å eie, lagre eller endre tekst. Bruk std::string_view for midlertidige parametere som bare skal leses.

Forbehold om levetid

Fordi en view ikke eier dataene sine, må de underliggende tegnene leve lenger enn viewen. Feil bruk fører til hengende views, noe som gjennomgås i en senere leksjon.

Kunnskapssjekk

Kontroller forståelsen av hvorfor string_view brukes.

Oppsummering

De har lært hvorfor string_view finnes:

  • Det er en view uten eierskap, bestående av en peker og en lengde.
  • Ved å ta imot den unngår De kopieringer og allokeringer for tekst som bare skal leses.
  • Den fungerer med strenger, literaler og char-arrayer.
  • Dataene som viewen viser til, må leve lenger enn viewen.
Gratis å komme i gang

Lær deg C++ med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
51
Leksjoner
203

Ofte stilte spørsmål

Er leksjonen «Hvorfor string_view» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien C++ Academy, inkludert «Hvorfor string_view», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i C++ Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Hvorfor string_view»?

Unngå kopiering av strenger Du øver på C++ Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med C++ Academy?

Ingen tidligere erfaring er nødvendig. C++ Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Hvorfor string_view»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne C++ Academy-leksjonen?

Ja. Alle C++ Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Hvorfor string_view
  2. Opprette views
  3. Fallgruver og levetider
  4. Strengalgoritmer
← Tilbake til C++ Academy