Pogled nizov v C++

Pogled Nizov V C



Na področju programiranja C++ je dajanje prednosti učinkovitosti in zmogljivosti ključnega pomena. Razred »std::string_view«, predstavljen v C++17, predstavlja vsestransko in pomnilniško učinkovito alternativo tradicionalni manipulaciji z nizi. V svojem bistvu je »std::string_view« nelastniški sklic na zaporedje znakov, ki običajno predstavlja podniz večjega niza. Za razliko od »std::string«, ki ima v lasti svoje podatke in interno upravlja pomnilnik, »std::string_view« deluje brez lastnika osnovnih podatkov. Zaradi te lastnosti je še posebej dragocen za scenarije, kjer so stroški kopiranja ali upravljanja pomnilnika nezaželeni. V tem članku bomo raziskali različne primere, da bi razumeli uporabo »std::string_view« v C++.

Primer 1: Učinkovito ravnanje z nizi

V sodobnem razvoju C++ je učinkovito ravnanje z nizi ključnega pomena za optimizacijo zmogljivosti in uporabe virov. Omogoča učinkovit dostop in manipulacijo nizov brez potrebe po prerazporejanju ali podvajanju pomnilnika. Za ponazoritev tega koncepta se poglobimo v praktični primer.







Razmislite o naslednjem delčku kode:



#include
#include

void processStringView ( std::string_view strView ) {

std::cout << 'Dolžina:' << strView.length ( ) << std::endl;
std::cout << 'Vsebina:' << strView << std::endl;
}

int main ( ) {

std::string originalString = 'Učinkovito ravnanje z nizi' ;

std::string_view viewOfString ( originalString ) ;

processStringView ( viewOfString ) ;

vrnitev 0 ;
}


V tem primeru imamo funkcijo »processStringView«, ki kot svoj parameter sprejme »std::string_view«. Funkcija nato natisne dolžino in vsebino pogleda niza s standardnim izhodom. Glavna funkcija inicializira »std::string« z imenom »originalString« z vrednostjo »Efficient String Handling«. Nato se ustvari »std::string_view« z imenom »viewOfString«, ki se nanaša na vsebino »originalString«.



S posredovanjem »viewOfString« funkciji »processStringView« lahko učinkovito izvajamo operacije na nizu, s čimer odpravimo potrebo po dodatnih dodelitvah pomnilnika. »std::string_view« je lahek sklic na osnovno zaporedje znakov »originalString« brez kopiranja podatkov.





Tukaj je ustvarjeni rezultat:



Primer 2: Interoperabilnost s podedovano kodo

Na področju razvoja C++ je brezhibna integracija novih in starih baz kode pogosto kritična skrb. »std::string_view« razvijalcem omogoča enostavno interakcijo s podedovanimi funkcijami, ki vrnejo kazalce »const char«.

Razmislite o naslednjem primeru, ki prikazuje praktično uporabo »std::string_view« za interoperabilnost. Tukaj imamo podedovano funkcijo z imenom »legacyFunction()«, ki vrne kazalec »const char«:

#include
#include

const char * legacyFunction ( ) {
vrnitev 'Podedovani niz' ;
}

int main ( ) {

std::string_view legacyStrView ( legacyFunction ( ) ) ;

std::cout << 'Starejši pogled niza: ' << legacyStrView << std::endl;

vrnitev 0 ;
}


Začnemo z definiranjem podedovane funkcije z imenom »legacyFunction()«, ki vrne kazalec »const char«, ki predstavlja niz, ki je označen kot »Legacy String«. Za brezhibno vključitev teh podedovanih podatkov v naš sodobni program C++ uporabljamo »std::string_view«. Natančneje, v funkciji main() ustvarimo primerek »std::string_view« z imenom »legacyStrView« in ga inicializiramo z rezultatom podedovane funkcije. Ta instancacija nam omogoča učinkovito enkapsulacijo in delo s starim kazalcem »const char«.

Posledično lahko dostopamo do podedovanega niza in ga manipuliramo, ne da bi se zatekli k nepotrebnemu kopiranju podatkov, pri čemer ohranjamo učinkovitost in združljivost. Zadnji korak v kodi vključuje uporabo »std::cout« za tiskanje vsebine podedovanega pogleda niza.

Izveden izhod je:

Primer 3: Izboljšano ravnanje z nizovnimi literali

Nizovni literali v C++ so tradicionalno predstavljeni kot nizi znakov. »std::string_view« poenostavlja delo z nizovnimi literali, saj zagotavlja priročen vmesnik. Z omogočanjem neposrednega dostopa do osnovnega niza znakov brez potrebe po eksplicitnih pretvorbah »std::string_view« poenostavi operacije na literalih nizov.

#include
#include

int main ( ) {
const char * mojLiteral = 'Pozdravljeni, String View!' ;
std::string_view literalView ( mojLiteral ) ;

std::cout << 'Prvi znak:' << literalView [ 0 ] << std::endl;

velikost_t položaj = literalView.find ( 'Vrvica' ) ;
std::cout << 'Položaj podniza: ' << položaj << std::endl;

vrnitev 0 ;
}


V tem primeru je 'Hello, String View!' nizovni literal je dodeljen kazalcu »myLiteral«. Uvedba »std::string_view« omogoča učinkovitejšo predstavitev tega niza brez potrebe po kopiranju njegove vsebine. Objekt »literalView« je ustvarjen s kazalcem »myLiteral«, ki nam omogoča ogled in manipulacijo osnovnega zaporedja znakov.

Uporaba »std::string_view« omogoča enostaven dostop do posameznih znakov v nizu. V izrezku kode »literalView[0]« pridobi in natisne prvi znak niza, kar prikazuje preprostost in neposrednost dostopa do elementov. Metoda »find« za »std::string_view« se uporablja za določitev položaja podniza »String« znotraj izvirnega niza.

Primer 4: Ekstrakcija podniza

Naloga ekstrakcije podniza vključuje pridobivanje dela danega niza na podlagi določenih kriterijev, kot je položaj ločila. Sposobnost brez napora ekstrahirati podnize je zmogljiva lastnost »std::string_view«. Razmislite o scenariju, kjer moramo izvleči del niza na podlagi ločila:

#include
#include

int main ( ) {
std::string fullString = 'jabolko-pomaranča-banana' ;
velikost_t ločiloPos = fullString.find ( '-' ) ;

std::string_view subString = fullString.substr ( 0 , ločiloPoz ) ;

std::cout << 'Izvlečen podniz: ' << podniz << std::endl;

vrnitev 0 ;
}


V tem izrezku kode začnemo z deklaracijo izvirnega niza, »fullString«, ki je inicializiran z vrednostjo »jabolko-pomaranča-banana«. Naš cilj je izvesti ekstrakcijo podniza. Da bi to dosegli, uporabljamo funkcijo »find«, ki jo ponuja standardna knjižnica C++.

Ko identificiramo položaj ločila znotraj »fullString«, shranjenega v spremenljivki »delimiterPos«, ekstrahiramo želeni podniz. Funkcija »substr« se kliče na izvirnem nizu, pri čemer se določi začetni položaj (0) in dolžina podniza, ki je natančno položaj ločila. Rezultat te operacije je ustvarjanje »std::string_view« z imenom »subString«, ki predstavlja del izvirnega niza od začetka do ločila.

Primer 5: Pomnilniško učinkovite podatkovne strukture

»std::string_view« igra ključno vlogo pri oblikovanju pomnilniško učinkovitih podatkovnih struktur. Namesto shranjevanja več kopij nizov lahko podatkovne strukture shranijo primerke »std::string_view« in tako zmanjšajo obremenitev pomnilnika.

#include
#include

struct Record {
std::string_view ime;
int starost;
} ;

int main ( ) {

Evidenčna oseba = { 'John Doe' , 30 } ;

std::cout << 'Ime:' << oseba.ime << ', Starost: ' << oseba.starost << std::endl;

vrnitev 0 ;
}


V tem izrezku kode prikazujemo uporabo »std::string_view« znotraj pomnilniško učinkovite podatkovne strukture. Definiramo strukturo »Zapis«, ki vsebuje član »std::string_view« z imenom »name« in celoštevilski član z imenom »age«. Uporaba »std::string_view« v tem kontekstu nam omogoča ustvarjanje lahke predstavitve niza brez potrebe po dodatni dodelitvi pomnilnika.

V funkciji »main« instanciramo objekt »Record« z imenom »person« z imenom »John Doe« in starostjo 30 let. »ime« člana »std::string_view« služi kot pogled brez lastništva znakovni podatki, ki ustrezajo imenu, s čimer se odpravi potreba po podvajanju vsebine niza. “std::cout << “Ime: ” << person.name << “, Starost: ” << person.age << std::endl;” izjava izpiše ime in starost osebe, ki sta shranjena v objektu »Zapis«.

Zaključek

V nenehno razvijajočem se okolju razvoja C++ 'std::string_view' izstopa kot dragocen dodatek programerjevemu kompletu orodij. Primeri, ki so prikazani v tem članku, poudarjajo prilagodljivost in uporabnost »std::string_view« na področju programiranja C++. Od učinkovite manipulacije z nizi in brezhibne interoperabilnosti s podedovano kodo do pomnilniško učinkovitih podatkovnih struktur je »std::string_view« dragocen za razvijalce, ki iščejo izboljšano zmogljivost in optimizirano kodo v različnih scenarijih. Ti scenariji iz resničnega sveta prikazujejo, kako lahko »std::string_view« optimizira kodo, zmanjša nepotrebno porabo pomnilnika in prispeva k splošni učinkovitosti aplikacij C++.