Stringivaade C++-s

Stringivaade C S



C++ programmeerimise valdkonnas on tõhususe ja jõudluse tähtsustamine ülioluline. Klass 'std::string_view', mis tutvustati C++17-s, pakub mitmekülgset ja mälutõhusat alternatiivi traditsioonilisele stringide manipuleerimisele. Oma tuumas on 'std::string_view' mitteomav viide märgijadale, mis tavaliselt esindab suurema stringi alamstringi. Erinevalt 'std::stringist', mis omab oma andmeid ja haldab mälu sisemiselt, töötab 'std::string_view' ilma aluseks olevaid andmeid omamata. See omadus muudab selle eriti väärtuslikuks stsenaariumide jaoks, kus mälu kopeerimise või haldamisega kaasnevad lisakulud on ebasoovitavad. Selles artiklis uurime erinevaid näiteid, et mõista 'std::string_view' kasutamist C++-s.

Näide 1: Tõhus stringide käsitlemine

Kaasaegses C++ arenduses on tõhus stringide haldamine jõudluse ja ressursside kasutamise optimeerimiseks ülioluline. See võimaldab stringidele tõhusat juurdepääsu ja nendega manipuleerimist ilma mälu ümberjaotamist või dubleerimist vajamata. Selle kontseptsiooni illustreerimiseks süveneme praktilisse näidesse.







Kaaluge järgmist koodilõiku:



#include
#include

tühine protsessStringView ( std::string_view strView ) {

std::cout << 'Pikkus:' << strView.length ( ) << std::endl;
std::cout << 'Sisu: ' << strView << std::endl;
}

int main ( ) {

std::string originalString = 'Tõhus stringide käsitsemine' ;

std::string_view viewOfString ( originaalString ) ;

protsessiStringView ( viewOfString ) ;

tagasi 0 ;
}


Selles näites on meil funktsioon 'processStringView', mis võtab parameetriks 'std::string_view'. Seejärel prindib funktsioon standardväljundi abil stringivaate pikkuse ja sisu. Põhifunktsioon initsialiseerib 'std::string' nimega 'originalString' väärtusega 'Efficient String Handling'. Seejärel luuakse 'std::string_view' nimega 'viewOfString', mis viitab 'originalString' sisule.



Edastades 'viewOfString' funktsioonile 'processStringView', saame stringiga toiminguid teha tõhusalt, välistades vajaduse täiendava mälu eraldamise järele. 'std::string_view' on kerge viide 'originalString' aluseks olevale märgijadale ilma andmeid kopeerimata.





Siin on genereeritud väljund:



Näide 2: koostalitlusvõime pärandkoodiga

C++ arendamise valdkonnas on uute ja vanade koodibaaside sujuv integreerimine sageli kriitilise tähtsusega. 'std::string_view' võimaldab arendajatel hõlpsasti suhelda pärandfunktsioonidega, mis tagastavad 'const char' viiteid.

Vaatleme järgmist näidet, mis demonstreerib „std::string_view” praktilist kasutamist koostalitlusvõime tagamiseks. Siin on meil pärandfunktsioon nimega 'legacyFunction()', mis tagastab 'const char' osuti:

#include
#include

konst char * legacyFunction ( ) {
tagasi 'Pärand string' ;
}

int main ( ) {

std::string_view legacyStrView ( legacyFunction ( ) ) ;

std::cout << 'Pärandstringivaade:' << legacyStrView << std::endl;

tagasi 0 ;
}


Alustuseks määratleme pärandfunktsiooni nimega 'legacyFunction()', mis tagastab 'const char' osuti, mis tähistab stringi, mis on märgistatud kui 'Pärandstring'. Nende pärandandmete sujuvaks kaasamiseks meie kaasaegsesse C++ programmi kasutame 'std::string_view'. Funktsioonis main() loome konkreetselt 'std::string_view' eksemplari nimega 'legacyStrView' ja lähtestame selle pärandfunktsiooni tulemusega. See instantseerimine võimaldab meil tõhusalt kapseldada ja töötada pärandkursoriga 'const char'.

Selle tulemusel saame juurdepääsu pärandstringile ja sellega manipuleerida ilma tarbetut andmete kopeerimist kasutamata, säilitades nii tõhususe kui ka ühilduvuse. Koodi viimane samm hõlmab std::cout kasutamist pärandstringivaate sisu printimiseks.

Täidetud väljund on:

Näide 3: stringliteraalide täiustatud käsitlemine

Stringi literaale esitatakse C++ keeles traditsiooniliselt märgimassiividena. 'std::string_view' lihtsustab stringiliteraalidega töötamist, pakkudes mugavat liidest. Lubades otsejuurdepääsu aluseks olevale märgimassiivile ilma selgesõnaliste teisendusteta, lihtsustab 'std::string_view' stringiliteraalide toiminguid.

#include
#include

int main ( ) {
konst char * myLiteral = 'Tere, String View!' ;
std::string_view literalView ( myLiteral ) ;

std::cout << 'Esimene tegelane:' << sõnasõnaline vaade [ 0 ] << std::endl;

size_t position = literalView.find ( 'String' ) ;
std::cout << 'Alamstringi positsioon:' << positsiooni << std::endl;

tagasi 0 ;
}


Selles näites on 'Tere, stringivaade!' string literal on määratud 'myLiteral' osutile. 'std::string_view' kasutuselevõtt hõlbustab selle stringi tõhusamat esitamist, ilma et oleks vaja selle sisu kopeerida. Objekt 'literalView' luuakse 'myLiteral' osuti abil, mis võimaldab meil vaadata ja manipuleerida aluseks olevat märgijada.

„std::string_view” kasutamine annab lihtsa juurdepääsu stringi üksikutele tähemärkidele. Koodilõigu puhul otsib ja prindib „literalView[0]” stringi esimese tähemärgi, mis näitab elementidele juurdepääsu lihtsust ja otsekohesust. Otsimismeetodit 'std::string_view' kasutatakse alamstringi 'String' asukoha määramiseks algses stringis.

Näide 4: Alamstringi ekstraheerimine

Alamstringi ekstraheerimise ülesanne hõlmab antud stringi osa hankimist kindlaksmääratud kriteeriumide, näiteks eraldaja asukoha alusel. Võimalus alamstringe vaevata ekstraheerida on 'std::string_view' võimas funktsioon. Mõelge stsenaariumile, kus peame eraldama eraldaja põhjal osa stringist:

#include
#include

int main ( ) {
std::string fullString = 'õun-apelsin-banaan' ;
size_t delimiterPos = fullString.find ( '-' ) ;

std::string_view subString = fullString.substr ( 0 , eraldajaPos ) ;

std::cout << 'Ekstraktitud alamstring:' << alamstring << std::endl;

tagasi 0 ;
}


Selle koodilõigu puhul alustame algse stringi 'fullString' deklaratsiooniga, mis initsialiseeritakse väärtusega 'õun-apelsin-banaan'. Meie eesmärk on teostada alamstringi ekstraheerimine. Selle saavutamiseks kasutame C++ standardteegi pakutavat funktsiooni 'leida'.

Kui oleme tuvastanud eraldusmärgi asukoha „fullString“ sees, mis on salvestatud muutujasse „delimiterPos“, eraldame soovitud alamstringi. Funktsiooni 'substr' kutsutakse välja algsel stringil, mis määrab algpositsiooni (0) ja alamstringi pikkuse, mis on täpselt eraldaja asukoht. Selle toimingu tulemusel luuakse 'std::string_view' nimega 'subString', mis esindab algse stringi osa algusest kuni eraldajani.

Näide 5: mälutõhusad andmestruktuurid

'std::string_view' mängib mälutõhusate andmestruktuuride kujundamisel otsustavat rolli. Selle asemel, et salvestada mitu stringide koopiat, saavad andmestruktuurid salvestada 'std::string_view' eksemplare, vähendades seega mälumahtu.

#include
#include

struct Record {
std::stringi_vaate nimi;
int vanus;
} ;

int main ( ) {

Rekordisik = { 'John Doe' , 30 } ;

std::cout << 'Nimi:' << isik.nimi << ', Vanus: ' << inimene.vanus << std::endl;

tagasi 0 ;
}


Selles koodilõigul tutvustame 'std::string_view' kasutamist mälutõhusas andmestruktuuris. Määratleme struktuuri 'Kirje', mis sisaldab 'std::string_view' liiget nimega 'nimi' ja täisarvulist liiget nimega 'vanus'. „std::string_view” kasutamine selles kontekstis võimaldab meil luua stringi kerge esituse, ilma et oleks vaja täiendavat mälu eraldamist.

Funktsioonis 'peamine' loome objekti 'Record' nimega 'person' nimega 'John Doe' ja vanusega 30. 'std::string_view' liige 'nimi' toimib mitteomava vaatena nimele vastavad märgiandmed, välistades vajaduse stringi sisu dubleerimiseks. 'std::cout << 'Nimi: ' << isik.nimi << ', Vanus: ' << isik.vanus << std::endl;' lause väljastab isiku nime ja vanuse, mis on salvestatud objektile “Rekord”.

Järeldus

C++ arenduse pidevalt areneval maastikul paistab 'std::string_view' silma kui väärtuslik lisand programmeerija tööriistakomplektile. Selles artiklis illustreeritud juhtumid rõhutavad 'std::string_view' kohandatavust ja kasulikkust C++ programmeerimise valdkonnas. Alates tõhusast stringide manipuleerimisest ja sujuvast koostalitlusvõimest pärandkoodiga kuni mälutõhusate andmestruktuurideni – „std::string_view” on väärtuslik arendajatele, kes otsivad täiustatud jõudlust ja optimeeritud koodi erinevates stsenaariumides. Need reaalse maailma stsenaariumid näitavad, kuidas 'std::string_view' saab koodi optimeerida, vähendada tarbetut mälumahtu ja aidata kaasa C++ rakenduste üldisele tõhususele.