String nézet C++ nyelven

String Nezet C Nyelven



A C++ programozás területén a hatékonyság és a teljesítmény prioritása döntő fontosságú. A C++17-ben bevezetett „std::string_view” osztály sokoldalú és memóriatakarékos alternatívát kínál a hagyományos karakterlánc-manipulációval szemben. Lényegében az „std::string_view” egy nem tulajdonos hivatkozás egy karaktersorozatra, amely általában egy nagyobb karakterlánc részkarakterláncát képviseli. Az „std::string”-től eltérően, amely birtokolja az adatokat, és belsőleg kezeli a memóriát, az „std::string_view” anélkül működik, hogy birtokolná az alapul szolgáló adatokat. Ez a jellemző különösen értékessé teszi olyan esetekben, amikor nem kívánatos a memória másolása vagy kezelése. Ebben a cikkben a különböző példákat vizsgáljuk meg, hogy megértsük az „std::string_view” használatát a C++ nyelven.

1. példa: Hatékony karakterlánckezelés

A modern C++ fejlesztésben a hatékony karakterlánckezelés kulcsfontosságú a teljesítmény és az erőforrás-kihasználás optimalizálása szempontjából. Lehetővé teszi a karakterláncok hatékony elérését és kezelését anélkül, hogy memória-újraelosztásra vagy duplikációra lenne szükség. Ennek a koncepciónak a szemléltetésére nézzünk egy gyakorlati példát.







Vegye figyelembe a következő kódrészletet:



#include
#include

void processStringView ( std::string_view strView ) {

std::cout << 'Hossz:' << strView.length ( ) << std::endl;
std::cout << 'Tartalom: ' << strView << std::endl;
}

int fő ( ) {

std::string originalString = 'Hatékony húrkezelés' ;

std::string_view viewOfString ( OriginalString ) ;

processStringView ( viewOfString ) ;

Visszatérés 0 ;
}


Ebben a példában van a „processStringView” függvény, amely az „std::string_view” paramétert veszi alapul. A függvény ezután kiírja a karakterlánc nézet hosszát és tartalmát a szabványos kimenet használatával. A fő függvény inicializálja az „originalString” nevű „std::string”-et az „Efficient String Handling” értékkel. Ezt követően létrejön a „viewOfString” nevű „std::string_view”, amely az „originalString” tartalmára utal.



Ha a „viewOfString”-t átadjuk a „processStringView” függvénynek, akkor hatékonyan tudjuk végrehajtani a karakterláncon végzett műveleteket, így nincs szükség extra memóriafoglalásra. Az „std::string_view” egy egyszerű hivatkozás az „originalString” mögöttes karaktersorozatra az adatok másolása nélkül.





Íme a generált kimenet:



2. példa: Együttműködés a régi kóddal

A C++ fejlesztés területén az új és a régi kódbázisok zökkenőmentes integrációja gyakran kritikus probléma. Az „std::string_view” lehetővé teszi a fejlesztők számára, hogy könnyedén kommunikáljanak a régi függvényekkel, amelyek a „const char” mutatókat adják vissza.

Tekintsük a következő példát, amely bemutatja az „std::string_view” gyakorlati használatát az interoperabilitás érdekében. Itt van egy „legacyFunction()” nevű örökölt függvényünk, amely egy „const char” mutatót ad vissza:

#include
#include

const char * legacyFunction ( ) {
Visszatérés 'örökölt karakterlánc' ;
}

int fő ( ) {

std::string_view legacyStrView ( legacyFunction ( ) ) ;

std::cout << 'Legacy String View:' << legacyStrView << std::endl;

Visszatérés 0 ;
}


Kezdjük egy „legacyFunction()” nevű örökölt függvény definiálásával, amely egy „const char” mutatót ad vissza, amely egy „Legacy String” címkével ellátott karakterláncot képvisel. Ahhoz, hogy ezeket az örökölt adatokat zökkenőmentesen beépítsük modern C++ programunkba, az „std::string_view”-t használjuk. A main() függvényben konkrétan létrehozzuk az „std::string_view” „legacyStrView” nevű példányát, és inicializáljuk a legacy függvény eredményével. Ez a példányosítás lehetővé teszi számunkra, hogy hatékonyan beágyazzuk az örökölt „const char” mutatót és dolgozzunk vele.

Ennek eredményeként hozzáférhetünk és manipulálhatjuk az örökölt karakterláncot anélkül, hogy szükségtelen adatmásoláshoz folyamodnánk, megőrizve a hatékonyságot és a kompatibilitást. A kód utolsó lépése az „std::cout” használata az örökölt karakterlánc nézet tartalmának kinyomtatására.

A végrehajtott kimenet a következő:

3. példa: Továbbfejlesztett karakterlánc-kezelés

A karakterlánc-literálokat a C++-ban hagyományosan karaktertömbökként ábrázolják. Az „std::string_view” kényelmes felületet biztosítva leegyszerűsíti a string literálokkal való munkát. Azáltal, hogy közvetlen hozzáférést tesz lehetővé az alapul szolgáló karaktertömbhöz, kifejezett konverziók nélkül, az „std::string_view” leegyszerűsíti a karakterlánc-literálokon végzett műveleteket.

#include
#include

int fő ( ) {
const char * myLiteral = – Helló, String View! ;
std::string_view literalView ( myLiteral ) ;

std::cout << 'Első karakter:' << literalView [ 0 ] << std::endl;

size_t position = literalView.find ( 'Húr' ) ;
std::cout << 'Substring pozíció: ' << pozíció << std::endl;

Visszatérés 0 ;
}


Ebben a példában a „Hello, String View!” string literal van hozzárendelve a „myLiteral” mutatóhoz. Az „std::string_view” bevezetése megkönnyíti ennek a karakterláncnak a hatékonyabb ábrázolását anélkül, hogy a tartalmát másolni kellene. A „literalView” objektumot a „myLiteral” mutató segítségével hozzák létre, amely lehetővé teszi számunkra, hogy megtekintsük és kezeljük a mögöttes karaktersorozatot.

Az „std::string_view” használata egyszerű hozzáférést biztosít a karakterláncon belüli egyes karakterekhez. A kódrészletben a „literalView[0]” lekéri és kiírja a karakterlánc első karakterét, bemutatva az elemek elérésének egyszerűségét és közvetlenségét. Az „std::string_view” „find” metódusa a „String” részkarakterlánc pozíciójának meghatározására szolgál az eredeti karakterláncon belül.

4. példa: Alkarakterlánc-kivonás

A részkarakterlánc kinyerésének feladata egy adott karakterlánc egy részének lekérése meghatározott kritériumok, például egy határoló helye alapján. Az „std::string_view” erőteljes tulajdonsága az alkarakterláncok könnyed kibontásának képessége. Tekintsünk egy forgatókönyvet, amikor egy karakterlánc egy részét el kell bontani egy határoló alapján:

#include
#include

int fő ( ) {
std::string fullString = 'alma-narancs-banán' ;
size_t delimiterPos = fullString.find ( '-' ) ;

std::string_view subString = fullString.substr ( 0 , határolóPos ) ;

std::cout << 'Kivont részkarakterlánc: ' << alkarakterlánc << std::endl;

Visszatérés 0 ;
}


Ebben a kódrészletben egy eredeti karakterlánc, a „fullString” deklarálásával kezdjük, amely az „alma-narancs-banán” értékkel van inicializálva. Célunk a részstring kivonás végrehajtása. Ennek eléréséhez a C++ szabványkönyvtár által biztosított „find” funkciót alkalmazzuk.

Miután azonosítottuk a határoló pozícióját a „fullString”-en belül, a „delimiterPos” változóban tárolva, kivonjuk a kívánt részkarakterláncot. A „substr” függvény az eredeti karakterláncon kerül meghívásra, megadva a kezdőpozíciót (0) és az alsztring hosszát, amely pontosan a határoló pozíciója. Ez a művelet a „subString” nevű „std::string_view” létrehozását eredményezi, amely az eredeti karakterlánc részét képviseli az elejétől a határolóig.

5. példa: Memória-hatékony adatstruktúrák

Az „std::string_view” kulcsfontosságú szerepet játszik a memóriahatékony adatszerkezetek kialakításában. A karakterláncok több másolatának tárolása helyett az adatstruktúrák tárolhatják az „std::string_view” példányokat, így csökkentve a memória többletterhelését.

#include
#include

struct Record {
std::string_view name;
int kor;
} ;

int fő ( ) {

Rekord személy = { 'Gipsz Jakab' , 30 } ;

std::cout << 'Név:' << személy.név << ', Életkor: ' << személyiség << std::endl;

Visszatérés 0 ;
}


Ebben a kódrészletben bemutatjuk az „std::string_view” használatát egy memóriahatékony adatstruktúrán belül. Meghatározunk egy „Record” struktúrát, amely egy „std::string_view” „name” nevű tagból és egy „age” nevű egész számból áll. Az „std::string_view” használata ebben a kontextusban lehetővé teszi, hogy egy karakterlánc könnyű ábrázolását hozzuk létre anélkül, hogy további memóriafoglalásra lenne szükség.

A „main” függvényben példányosítunk egy „Person” nevű „Rekord” objektumot „John Doe” névvel és 30 éves korhatárral. Az „std::string_view” tag „name” a nem tulajdonos nézetként szolgál a névnek megfelelő karakteradatokat, kiküszöbölve a karakterlánc tartalom megkettőzésének szükségességét. Az 'std::cout << 'Név: ' << személy.név << ', Életkor: ' << személy.életkor << std::endl;' Az utasítás a „Record” objektumban tárolt személy nevét és életkorát adja ki.

Következtetés

A C++ fejlesztés folyamatosan fejlődő környezetében az „std::string_view” értékes kiegészítője a programozó eszköztárának. A cikkben bemutatott esetek kiemelik az „std::string_view” adaptálhatóságát és hasznosságát a C++ programozás területén. A hatékony karakterlánc-manipulációtól és az örökölt kóddal való zökkenőmentes együttműködéstől a memóriahatékony adatstruktúrákig az „std::string_view” értékes a fejlesztők számára, akik fokozott teljesítményt és optimalizált kódot keresnek különböző forgatókönyvekben. Ezek a valós forgatókönyvek bemutatják, hogy az „std::string_view” hogyan tudja optimalizálni a kódot, csökkenteni a felesleges memóriaterhelést, és hozzájárulni a C++ alkalmazások általános hatékonyságához.