C++ Academy · Lektion

Hvorfor string_view

Undgå kopiering af strenge

Lektion 1 af 413 trin

Hvorfor string_view er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.

Kopieringsomkostningen

At sende std::string som værdi kopierer hele bufferen. Ved skrivebeskyttet adgang er den kopiering spildt arbejde. std::string_view er en let, ikke-ejende visning – blot en pointer og en længde. Inkludér <string_view>.

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

Hvad en visning indeholder

En string_view gemmer kun en pointer til eksisterende tegn og en længde. Den ejer 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";
}

Skrivebeskyttede parametre

Når du accepterer std::string_view, fungerer din funktion med std::string, strengliteraler og char-arrays uden at kopiere nogen af 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

Oprettelse af en visning allokerer aldrig hukommelse, så den er billig at kopiere og sende rundt som værdi.

#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";
}

Billige delstrenge

substr på en visning returnerer en anden visning i den samme hukommelse, så ingen tegn kopieres.

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

Sammenligning med fokus på ydeevne

For funktioner, der kun undersøger tekst, undgår string_view både heap-allokering og kopiering, hvilket er vigtigt i hyppigt kørte løkker og ved parsing.

Længde og indeksering

En visning understøtter den velkendte grænseflade: size(), empty(), indeksering og intervalbaseret iteration.

#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";
}

Visninger er skrivebeskyttede

Du kan ikke ændre tegn gennem en string_view; den giver kun læseadgang. Hvis du vil ændre teksten, skal du bruge den ejende streng.

Fra literal til visning

Strengliteraler konverteres direkte til visninger, hvilket gør det ekstremt billigt at 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

Brug std::string, når du skal eje, gemme eller ændre tekst. Brug std::string_view til midlertidige, skrivebeskyttede parametre.

Bemærkning om levetid

Fordi en visning ikke ejer sine data, skal de underliggende tegn leve længere end visningen. Misbrug af dette fører til ugyldige visninger, som gennemgås i en senere lektion.

Hurtigt tjek

Tjek din forståelse af, hvorfor string_view bruges.

Opsummering

Du har lært hvorfor string_view findes:

  • Det er en ikke-ejende visning bestående af en pointer og en længde.
  • Ved at acceptere den undgår du kopiering og allokering ved skrivebeskyttet tekst.
  • Den fungerer med strenge, literaler og char-arrays.
  • De viste data skal leve længere end visningen.
Gratis at komme i gang

Lær C++ med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “Hvorfor string_view” gratis?

Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Hvorfor string_view”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Hvorfor string_view”?

Undgå kopiering af strenge Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C++ Academy?

Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Hvorfor string_view”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C++ Academy-lektion?

Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Hvorfor string_view
  2. Oprettelse af views
  3. Faldgruber og levetider
  4. String-algoritmer
← Tilbage til C++ Academy