Styginių rodinys C++

Styginiu Rodinys C



C++ programavimo srityje itin svarbu teikti pirmenybę efektyvumui ir našumui. „std::string_view“ klasė, pristatyta C++17, yra universali ir atmintį taupanti alternatyva tradiciniam manipuliavimui eilutėmis. Iš esmės „std::string_view“ yra nuoroda į simbolių seką, kuri paprastai reiškia didesnės eilutės eilutę. Skirtingai nuo „std::string“, kuriai priklauso duomenys ir kuri tvarko atmintį viduje, „std::string_view“ veikia neturėdama pagrindinių duomenų. Dėl šios charakteristikos ji ypač naudinga tais atvejais, kai atminties kopijavimo ar tvarkymo išlaidos yra nepageidautinos. Šiame straipsnyje mes išnagrinėsime įvairius pavyzdžius, kad suprastume „std::string_view“ naudojimą C++.

1 pavyzdys: efektyvus stygų valdymas

Šiuolaikinio C++ kūrimo metu efektyvus eilučių tvarkymas yra labai svarbus siekiant optimizuoti našumą ir išteklių panaudojimą. Tai leidžia efektyviai pasiekti ir valdyti eilutes, nereikia perskirstyti atminties ar dubliuoti. Norėdami iliustruoti šią koncepciją, pasigilinkime į praktinį pavyzdį.







Apsvarstykite šį kodo fragmentą:



#include
#include

galiojantis procesasStringView ( std::string_view strView ) {

std::cout << 'Ilgis:' << strView.length ( ) << std::endl;
std::cout << 'Turinys: ' << strView << std::endl;
}

tarp pagrindinis ( ) {

std::string originalString = „Efektyvus stygų valdymas“ ;

std::string_view viewOfString ( originalStyga ) ;

procesasStringView ( viewOfString ) ;

grąžinti 0 ;
}


Šiame pavyzdyje turime funkciją „processStringView“, kurios parametru yra „std::string_view“. Tada funkcija išspausdina eilutės rodinio ilgį ir turinį naudodama standartinę išvestį. Pagrindinė funkcija inicijuoja „std::string“, pavadintą „originalString“, su „Efficient String Handling“ reikšme. Vėliau sukuriamas „std::string_view“, pavadintas „viewOfString“, nurodantis „originalString“ turinį.



Perduodami „viewOfString“ funkcijai „processStringView“, operacijas su eilute galime atlikti efektyviai, nereikalaujant papildomos atminties paskirstymo. „std::string_view“ yra lengva nuoroda į pagrindinę „originalString“ simbolių seką, nekopijuojant duomenų.





Štai sugeneruota išvestis:



2 pavyzdys. Sąveika su senuoju kodu

C++ kūrimo srityje sklandus naujų ir senų kodų bazių integravimas dažnai yra labai svarbus. „std::string_view“ leidžia kūrėjams be vargo sąveikauti su senomis funkcijomis, kurios grąžina „const char“ rodykles.

Apsvarstykite šį pavyzdį, kuris parodo praktinį „std::string_view“ naudojimą sąveikai užtikrinti. Čia turime pasenusią funkciją, pavadintą „legacyFunction()“, kuri grąžina „const char“ žymeklį:

#include
#include

const char * LegacyFunction ( ) {
grąžinti „Pastovėjusi eilutė“ ;
}

tarp pagrindinis ( ) {

std::string_view legacyStrView ( LegacyFunction ( ) ) ;

std::cout << 'Pasenęs eilutės vaizdas:' << legacyStrView << std::endl;

grąžinti 0 ;
}


Pradedame apibrėždami pasenusią funkciją, pavadintą „legacyFunction()“, kuri grąžina „const char“ žymeklį, nurodantį eilutę, pažymėtą kaip „Legacy String“. Norėdami sklandžiai įtraukti šiuos senus duomenis į mūsų modernią C++ programą, naudojame „std::string_view“. Konkrečiai, funkcijoje main() sukuriame „std::string_view“ egzempliorių, pavadintą „legacyStrView“, ir inicijuojame jį naudodami senosios funkcijos rezultatą. Šis egzempliorius leidžia efektyviai įterpti ir dirbti su senuoju „const char“ žymekliu.

Dėl to galime pasiekti seną eilutę ir ja manipuliuoti nesiimdami nereikalingo duomenų kopijavimo, taip išsaugodami efektyvumą ir suderinamumą. Paskutinis kodo veiksmas apima „std::cout“ naudojimą, kad būtų atspausdintas senosios eilutės rodinio turinys.

Vykdoma išvestis yra tokia:

3 pavyzdys: patobulintas eilučių raidžių tvarkymas

Eilučių literalai C++ kalboje tradiciškai vaizduojami kaip simbolių masyvai. „std::string_view“ supaprastina darbą su eilučių literalais, nes suteikia patogią sąsają. Suteikdama tiesioginę prieigą prie pagrindinių simbolių masyvo be aiškių konversijų, „std::string_view“ supaprastina operacijas su eilučių literalais.

#include
#include

tarp pagrindinis ( ) {
const char * myLiteral = 'Sveiki, String View!' ;
std::string_view literalView ( myLiteral ) ;

std::cout << „Pirmasis veikėjas:“ << literalView [ 0 ] << std::endl;

size_t position = literalView.find ( 'styga' ) ;
std::cout << 'Poeilutės padėtis: ' << padėtis << std::endl;

grąžinti 0 ;
}


Šiame pavyzdyje „Sveiki, eilutės rodinys! eilutė literal yra priskirta rodyklei „myLiteral“. „std::string_view“ įvedimas palengvina efektyvesnį šios eilutės atvaizdavimą, nereikia kopijuoti jos turinio. Objektas „literalView“ sukuriamas naudojant „myLiteral“ žymeklį, kuris leidžia peržiūrėti ir valdyti pagrindinę simbolių seką.

Naudojant „std::string_view“ galima lengvai pasiekti atskirus eilutės simbolius. Kodo fragmente „literalView[0]“ nuskaito ir išspausdina pirmąjį eilutės simbolį, parodydama elementų prieigos paprastumą ir tiesumą. „std::string_view“ „rasti“ metodas naudojamas „String“ poeilės vietai nustatyti pradinėje eilutėje.

4 pavyzdys: poeilutės ištraukimas

Poeilutės ištraukimo užduotis apima tam tikros eilutės dalies nuskaitymą pagal nurodytus kriterijus, tokius kaip skyriklio padėtis. Galimybė be vargo išgauti eilutes yra galinga „std::string_view“ savybė. Apsvarstykite scenarijų, kai turime išgauti eilutės dalį pagal skirtuką:

#include
#include

tarp pagrindinis ( ) {
std::string fullString = 'obuoliai-apelsinai-bananas' ;
size_t delimiterPos = fullString.find ( '-' ) ;

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

std::cout << „Ištraukta poeilutė:“ << poeilutė << std::endl;

grąžinti 0 ;
}


Šiame kodo fragmente mes pradedame nuo pradinės eilutės „fullString“ deklaravimo, kuri inicijuojama „obuolių-apelsinų-banano“ reikšme. Mūsų tikslas yra atlikti poeilutės ištraukimą. Norėdami tai pasiekti, naudojame C++ standartinės bibliotekos teikiamą funkciją „rasti“.

Kai nustatome skirtuko padėtį „fullString“, saugomą „delimiterPos“ kintamajame, išgauname norimą poeilelę. Funkcija „substr“ iškviečiama pradinėje eilutėje, nurodant pradinę padėtį (0) ir poeilio ilgį, kuris yra būtent skyriklio padėtis. Šios operacijos rezultatas yra „std::string_view“ sukūrimas, pavadintas „subString“, kuris atspindi pradinės eilutės dalį nuo pradžios iki skyriklio.

5 pavyzdys: Atmintį taupančios duomenų struktūros

„std::string_view“ vaidina lemiamą vaidmenį kuriant atmintį tausojančias duomenų struktūras. Užuot saugojusias kelias eilučių kopijas, duomenų struktūros gali saugoti „std::string_view“ egzempliorius, taip sumažindamos atminties sąnaudas.

#include
#include

struktūra Įrašas {
std::string_view pavadinimas;
int amžius;
} ;

tarp pagrindinis ( ) {

Įrašomas asmuo = { 'Jonas Doe' , 30 } ;

std::cout << 'Vardas: ' << asmuo.vardas << ', Amžius: ' << asmuo.amžius << std::endl;

grąžinti 0 ;
}


Šiame kodo fragmente parodome „std::string_view“ panaudojimą atmintį taupančioje duomenų struktūroje. Mes apibrėžiame „Įrašo“ struktūrą, kurią sudaro „std::string_view“ narys, pavadintas „vardas“, ir sveikasis skaičius narys, vadinamas „amžiu“. „std::string_view“ naudojimas šiame kontekste leidžia sukurti lengvą eilutės atvaizdą be papildomo atminties paskirstymo.

„Pagrindinėje“ funkcijoje pavaizduojame objektą „Įrašas“, pavadintą „asmuo“ vardu „John Doe“ ir 30 metų amžiaus. „std::string_view“ nario „vardas“ naudojamas kaip nepriklausantis vaizdas pavadinimą atitinkantys simbolių duomenys, pašalinant būtinybę kopijuoti eilutės turinį. 'std::cout << 'Vardas: ' << asmens.vardas << ', Amžius: ' << asmuo.amžius << std::endl;' pareiškimas išveda asmens vardą ir amžių, kurie yra saugomi objekte „Įrašas“.

Išvada

Nuolat besikeičiančioje C++ kūrimo aplinkoje „std::string_view“ išsiskiria kaip vertingas programuotojo įrankių rinkinio priedas. Šiame straipsnyje iliustruoti atvejai pabrėžia „std::string_view“ pritaikomumą ir naudingumą C++ programavimo srityje. Nuo veiksmingo manipuliavimo eilutėmis ir sklandaus suderinamumo su senu kodu iki atmintį taupančių duomenų struktūrų – „std::string_view“ yra vertinga kūrėjams, kurie siekia geresnio našumo ir optimizuoto kodo įvairiuose scenarijuose. Šie realaus pasaulio scenarijai parodo, kaip „std::string_view“ gali optimizuoti kodą, sumažinti nereikalingas atminties sąnaudas ir prisidėti prie bendro C++ programų efektyvumo.