Merkkijononäkymä C++:ssa

Merkkijononakyma C Ssa



C++-ohjelmoinnin alalla tehokkuuden ja suorituskyvyn priorisointi on ratkaisevan tärkeää. C++17:ssä käyttöön otettu 'std::string_view'-luokka on monipuolinen ja muistia säästävä vaihtoehto perinteiselle merkkijonojen käsittelylle. Pohjimmiltaan 'std::string_view' on ei-omistava viittaus merkkijonoon, joka yleensä edustaa suuremman merkkijonon osamerkkijonoa. Toisin kuin 'std::string', joka omistaa tietonsa ja hallitsee muistia sisäisesti, 'std::string_view' toimii ilman taustalla olevien tietojen omistamista. Tämä ominaisuus tekee siitä erityisen arvokkaan skenaarioissa, joissa muistin kopioiminen tai hallinta ei ole toivottavaa. Tässä artikkelissa tutkimme erilaisia ​​esimerkkejä ymmärtääksemme 'std::string_view':n käytön C++:ssa.

Esimerkki 1: Tehokas merkkijonojen käsittely

Nykyaikaisessa C++-kehityksessä tehokas merkkijonojen käsittely on ratkaisevan tärkeää suorituskyvyn ja resurssien käytön optimoinnissa. Se mahdollistaa tehokkaan pääsyn ja käsittelyn merkkijonoihin ilman muistin uudelleenallokointia tai kopioimista. Tämän käsitteen havainnollistamiseksi syvennytään käytännön esimerkkiin.







Harkitse seuraavaa koodinpätkää:



#include
#include

void processStringView ( std::string_view strView ) {

std::cout << 'Pituus:' << strView.length ( ) << std::endl;
std::cout << 'Sisältö: ' << strView << std::endl;
}

int main ( ) {

std::string originalString = 'Tehokas merkkijonojen käsittely' ;

std::string_view viewOfString ( alkuperäinen merkkijono ) ;

ProcessStringView ( viewOfString ) ;

palata 0 ;
}


Tässä esimerkissä meillä on 'processStringView'-funktio, joka ottaa parametriksi 'std::string_view'. Funktio tulostaa sitten merkkijononäkymän pituuden ja sisällön vakiotulosteen avulla. Päätoiminto alustaa 'std::string'-nimisen 'originalString' arvolla 'Tehokas merkkijonojen käsittely'. Myöhemmin luodaan 'std::string_view' nimeltä 'viewOfString', joka viittaa 'originalString' -tiedoston sisältöön.



Välittämällä 'viewOfString' 'processStringView'-funktiolle voimme suorittaa merkkijonon toiminnot tehokkaasti, jolloin ylimääräisiä muistivarauksia ei tarvita. 'std::string_view' on kevyt viittaus 'originalString':n taustalla olevaan merkkijonoon kopioimatta tietoja.





Tässä on tuotettu tulos:



Esimerkki 2: Yhteentoimivuus vanhan koodin kanssa

C++-kehityksen alalla uusien ja vanhojen koodikantojen saumaton integrointi on usein kriittinen huolenaihe. 'std::string_view' antaa kehittäjille mahdollisuuden olla vaivattomasti vuorovaikutuksessa vanhojen funktioiden kanssa, jotka palauttavat 'const char' -osoittimet.

Harkitse seuraavaa esimerkkiä, joka havainnollistaa 'std::string_view':n käytännön käyttöä yhteentoimivuuteen. Täällä meillä on vanha funktio nimeltä 'legacyFunction()', joka palauttaa 'const char' -osoittimen:

#include
#include

const char * legacyFunction ( ) {
palata 'Vanha merkkijono' ;
}

int main ( ) {

std::string_view legacyStrView ( legacyFunction ( ) ) ;

std::cout << 'Vanha merkkijononäkymä:' << legacyStrView << std::endl;

palata 0 ;
}


Aloitamme määrittelemällä vanhan funktion nimeltä 'legacyFunction()', joka palauttaa 'const char' -osoittimen, joka edustaa merkkijonoa, joka on nimetty nimellä 'Legacy String'. Käytämme 'std::string_view' -muotoa sisällyttääksemme nämä vanhat tiedot saumattomasti nykyaikaiseen C++-ohjelmaamme. Main()-funktiossa luomme nimenomaan 'std::string_view'-esiintymän nimeltä 'legacyStrView' ja alustamme sen legacy-funktion tuloksella. Tämän ilmentymisen avulla voimme tehokkaasti kapseloida ja työskennellä vanhan 'const char' -osoittimen kanssa.

Tämän seurauksena voimme käyttää ja käsitellä vanhaa merkkijonoa turvautumatta tarpeettomaan tietojen kopioimiseen, mikä säilyttää sekä tehokkuuden että yhteensopivuuden. Koodin viimeisessä vaiheessa käytetään 'std::cout'-komentoa vanhan merkkijononäkymän sisällön tulostamiseen.

Suoritettu tulos on:

Esimerkki 3: Parannettu merkkijonojen käsittely

C++:n merkkijonoliteraalit esitetään perinteisesti merkkijonoina. 'std::string_view' yksinkertaistaa merkkijonoliteraalien käyttöä tarjoamalla kätevän käyttöliittymän. Antamalla suoran pääsyn taustalla olevaan merkkijonoon ilman erityisiä muunnoksia, 'std::string_view' virtaviivaistaa merkkijonoliteraaleiden toimintaa.

#include
#include

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

std::cout << 'Ensimmäinen hahmo:' << kirjaimellinen näkymä [ 0 ] << std::endl;

size_t position = literalView.find ( 'merkkijono' ) ;
std::cout << 'Alimerkkijonon sijainti: ' << asema << std::endl;

palata 0 ;
}


Tässä esimerkissä 'Hei, merkkijononäkymä!' merkkijono literal on määritetty 'myLiteral'-osoittimelle. 'std::string_view':n käyttöönotto helpottaa tämän merkkijonon tehokkaampaa esittämistä ilman, että sen sisältöä tarvitsee kopioida. 'LiteralView' -objekti luodaan käyttämällä 'myLiteral'-osoitinta, jonka avulla voimme tarkastella ja muokata taustalla olevaa merkkijonoa.

'std::string_view':n käyttö tarjoaa helpon pääsyn merkkijonon yksittäisiin merkkeihin. Koodinpätkässä 'literalView[0]' hakee ja tulostaa merkkijonon ensimmäisen merkin, mikä osoittaa elementtien käytön yksinkertaisuuden ja suoruuden. 'std::string_view':n 'find'-menetelmää käytetään määrittämään 'String'-alimerkkijonon sijainti alkuperäisessä merkkijonossa.

Esimerkki 4: Alimerkkijonon purkaminen

Osamerkkijonon poimintatehtävä sisältää tietyn merkkijonon osan hakemisen tiettyjen kriteerien, kuten erottimen sijainnin, perusteella. Mahdollisuus purkaa alimerkkijonot vaivattomasti on 'std::string_view':n tehokas ominaisuus. Harkitse tilannetta, jossa meidän täytyy poimia osa merkkijonosta erottimen perusteella:

#include
#include

int main ( ) {
std::string fullString = 'omena-appelsiini-banaani' ;
size_t delimiterPos = fullString.find ( '-' ) ;

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

std::cout << 'Puettu osamerkkijono:' << osamerkkijono << std::endl;

palata 0 ;
}


Tässä koodinpätkässä aloitamme alkuperäisen merkkijonon 'fullString' ilmoittamisella, joka alustetaan arvolla 'omena-oranssi-banaani'. Tavoitteenamme on suorittaa alimerkkijonon purku. Tämän saavuttamiseksi käytämme C++-standardikirjaston tarjoamaa 'etsi'-toimintoa.

Kun olemme tunnistaneet erottimen sijainnin 'fullString' sisällä, joka on tallennettu 'delimiterPos'-muuttujaan, poimimme halutun alimerkkijonon. Alkuperäisessä merkkijonossa kutsutaan 'substr'-funktiota, joka määrittää aloituspaikan (0) ja alimerkkijonon pituuden, joka on juuri erottimen paikka. Tämä toiminto johtaa 'std::string_view':n luomiseen nimeltä 'alimerkkijono', joka edustaa alkuperäisen merkkijonon osaa alusta erottimeen.

Esimerkki 5: Muistitehokkaat tietorakenteet

'std::string_view' on tärkeä rooli muistitehokkaiden tietorakenteiden suunnittelussa. Sen sijaan, että tallennettaisiin useita merkkijonokopioita, tietorakenteet voivat tallentaa 'std::string_view'-esiintymiä, mikä vähentää muistin ylimääräistä kuormitusta.

#include
#include

struct Record {
std::merkkijononäkymän nimi;
int ikä;
} ;

int main ( ) {

Ennätyshenkilö = { 'John Doe' , 30 } ;

std::cout << 'Nimi:' << henkilö.nimi << ', Ikä: ' << henkilö.ikä << std::endl;

palata 0 ;
}


Tässä koodinpätkässä esittelemme 'std::string_view':n käyttöä muistitehokkaassa tietorakenteessa. Määrittelemme 'tietue'-rakenteen, joka sisältää 'std::string_view'-jäsenen nimeltä 'name' ja kokonaislukujäsenen nimeltä 'age'. 'std::string_view':n käyttö tässä yhteydessä antaa meille mahdollisuuden luoda kevyen esityksen merkkijonosta ilman lisämuistin varaamista.

'Main'-funktiossa instantoimme 'Record'-objektin nimeltä 'person', jonka nimi on 'John Doe' ja jonka ikä on 30. 'std::string_view'-jäsenen 'nimi' toimii ei-omistusnäkymänä nimeä vastaava merkkidata, mikä eliminoi tarpeen monistaa merkkijonon sisältöä. 'std::cout << 'Nimi: ' << henkilö.nimi << ', Ikä: ' << henkilö.ikä << std::endl;' lauseke tulostaa 'Record'-objektiin tallennetun henkilön nimen ja iän.

Johtopäätös

C++-kehityksen jatkuvasti kehittyvässä maisemassa 'std::string_view' erottuu arvokkaasta lisäyksestä ohjelmoijan työkalupakkiin. Tässä artikkelissa kuvatut tapaukset korostavat 'std::string_view':n mukautuvuutta ja hyödyllisyyttä C++-ohjelmoinnin alueella. Tehokas merkkijonojen käsittely ja saumaton yhteentoimivuus vanhan koodin kanssa muistitehokkaisiin tietorakenteisiin, 'std::string_view' on arvokas kehittäjille, jotka etsivät parempaa suorituskykyä ja optimoitua koodia erilaisissa skenaarioissa. Nämä tosielämän skenaariot osoittavat, kuinka 'std::string_view' voi optimoida koodin, vähentää tarpeettomia muistin kuluja ja edistää C++-sovellusten yleistä tehokkuutta.