Hvorfor string_view
Unngå kopiering av strenger
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.
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
- Hvorfor string_view
- Opprette views
- Fallgruver og levetider
- Strengalgoritmer