Стринг Виев у Ц++

String Viev U C



У домену Ц++ програмирања, давање приоритета ефикасности и перформансама је кључно. Класа „стд::стринг_виев“, представљена у Ц++17, представља разноврсну и меморијско ефикасну алтернативу традиционалној манипулацији стринговима. У својој сржи, „стд::стринг_виев“ је невласничка референца на низ знакова, који обично представља подниз већег стринга. За разлику од „стд::стринг“ који поседује своје податке и интерно управља меморијом, „стд::стринг_виев“ ради без поседовања основних података. Ова карактеристика га чини посебно вредним за сценарије где су трошкови копирања или управљања меморијом непожељни. У овом чланку ћемо истражити различите примере да бисмо разумели коришћење „стд::стринг_виев“ у Ц++.

Пример 1: Ефикасно руковање стринговима

У савременом развоју Ц++-а, ефикасно руковање стринговима је кључно за оптимизацију перформанси и коришћење ресурса. Омогућава ефикасан приступ и манипулацију стринговима без потребе за пренамјеном меморије или дуплирањем. Да бисмо илустровали овај концепт, хајде да се удубимо у практичан пример.







Размотрите следећи исечак кода:



#инцлуде <иостреам>
#инцлуде <стринг_виев>

воид процессСтрингВиев ( стд::стринг_виев стрВиев ) {

стд::цоут << 'Дужина: ' << стрВиев.ленгтх ( ) << стд::ендл;
стд::цоут << 'Садржај: ' << стрВиев << стд::ендл;
}

инт маин ( ) {

стд::стринг оригиналСтринг = „Ефикасно руковање стринговима“ ;

стд::стринг_виев виевОфСтринг ( оригиналСтринг ) ;

процессСтрингВиев ( виевОфСтринг ) ;

повратак 0 ;
}


У овом примеру имамо функцију „процессСтрингВиев“ која узима „стд::стринг_виев“ као свој параметар. Функција затим штампа дужину и садржај приказа стринга користећи стандардни излаз. Главна функција иницијализује „стд::стринг“ под називом „оригиналСтринг“ са вредношћу „Еффициент Стринг Хандлинг“. Након тога, креира се „стд::стринг_виев“ под називом „виевОфСтринг“, који се односи на садржај „оригиналСтринга“.



Пропуштањем функције „виевОфСтринг“ функцији „процессСтрингВиев“, можемо ефикасно извршити операције на стрингу, елиминишући потребу за додатним додељивањем меморије. „стд::стринг_виев“ је лагана референца на основну секвенцу знакова „оригиналСтринг“ без копирања података.





Ево генерисаног излаза:



Пример 2: Интероперабилност са старим кодом

У домену развоја Ц++-а, беспрекорна интеграција нових и старих кодних база је често критична брига. „стд::стринг_виев“ омогућава програмерима да без напора комуницирају са застарелим функцијама које враћају показиваче „цонст цхар“.

Размотрите следећи пример који показује практичну употребу „стд::стринг_виев“ за интероперабилност. Овде имамо застарелу функцију под називом „легациФунцтион()“ која враћа показивач „цонст цхар“:

#инцлуде <иостреам>
#инцлуде <стринг_виев>

цонст цхар * легациФунцтион ( ) {
повратак 'Застарели низ' ;
}

инт маин ( ) {

стд::стринг_виев легациСтрВиев ( легациФунцтион ( ) ) ;

стд::цоут << 'Застарели приказ стринга: ' << легациСтрВиев << стд::ендл;

повратак 0 ;
}


Почињемо тако што дефинишемо застарелу функцију под називом „легациФунцтион()“ која враћа показивач „цонст цхар“ који представља стринг који је означен као „Легаци Стринг“. Да бисмо неприметно инкорпорирали ове старе податке у наш савремени Ц++ програм, користимо „стд::стринг_виев“. У функцији маин(), конкретно, креирамо инстанцу „стд::стринг_виев“ под називом „легациСтрВиев“ и иницијализујемо је резултатом старе функције. Ова инстанција нам омогућава да ефикасно инкапсулирамо и радимо са застарелим показивачем „цонст цхар“.

Као резултат тога, можемо приступити и манипулисати застарелим низом без прибегавања непотребном копирању података, чувајући и ефикасност и компатибилност. Последњи корак у коду укључује коришћење „стд::цоут“ за штампање садржаја наслеђеног приказа стрингова.

Извршени излаз је:

Пример 3: Побољшано руковање стринг литералима

Литерали стрингова у Ц++ су традиционално представљени као низови знакова. „стд::стринг_виев“ поједностављује рад са литералима стрингова пружањем погодног интерфејса. Омогућавајући директан приступ основном низу знакова без потребе за експлицитним конверзијама, „стд::стринг_виев“ поједностављује операције над литералима стрингова.

#инцлуде <иостреам>
#инцлуде <стринг_виев>

инт маин ( ) {
цонст цхар * миЛитерал = „Здраво, стринг Виев!“ ;
стд::стринг_виев литералВиев ( миЛитерал ) ;

стд::цоут << 'Први знак:' << литералВиев [ 0 ] << стд::ендл;

сизе_т позиција = литералВиев.финд ( 'Низ' ) ;
стд::цоут << 'Позиција подниза: ' << положај << стд::ендл;

повратак 0 ;
}


У овом примеру, „Здраво, стринг Виев!“ стринг литерал се додељује показивачу „миЛитерал“. Увођење „стд::стринг_виев“ олакшава ефикасније представљање овог стринга без потребе за копирањем његовог садржаја. Објекат „литералВиев“ је креиран помоћу показивача „миЛитерал“ који нам омогућава да видимо и манипулишемо основним низом знакова.

Употреба „стд::стринг_виев“ омогућава лак приступ појединачним знаковима унутар стринга. У фрагменту кода, „литералВиев[0]“ преузима и штампа први карактер стринга, показујући једноставност и директност приступа елементима. Метода „пронађи“ за „стд::стринг_виев“ се користи за одређивање позиције подниза „Стринг“ унутар оригиналног низа.

Пример 4: Екстракција подстринга

Задатак екстракције подстринга укључује преузимање дела датог низа на основу специфицираних критеријума као што је позиција граничника. Могућност да се подстрингови без напора издвајају је моћна карактеристика „стд::стринг_виев“. Размотрите сценарио у коме треба да издвојимо део стринга на основу граничника:

#инцлуде <иостреам>
#инцлуде <стринг_виев>

инт маин ( ) {
стд::стринг фуллСтринг = 'јабука-наранџа-банана' ;
сизе_т делимитерПос = фуллСтринг.финд ( '-' ) ;

стд::стринг_виев субСтринг = фуллСтринг.субстр ( 0 , делимитерПос ) ;

стд::цоут << 'Издвојени подстринг: ' << субСтринг << стд::ендл;

повратак 0 ;
}


У овом исечку кода почињемо са декларацијом оригиналног стринга, „фуллСтринг“, који је иницијализован вредношћу „аппле-оранге-банана“. Наш циљ је да извршимо екстракцију подстринга. Да бисмо то постигли, користимо функцију „пронађи“ коју обезбеђује стандардна библиотека Ц++.

Када идентификујемо позицију граничника у оквиру „фуллСтринг“, ускладиштеног у променљивој „делимитерПос“, издвајамо жељени подниз. Функција “субстр” се позива на оригиналном низу, специфицирајући почетну позицију (0) и дужину подниза која је тачно позиција граничника. Ова операција резултира креирањем „стд::стринг_виев“ под називом „субСтринг“ који представља део оригиналног стринга од почетка до граничника.

Пример 5: Меморијски ефикасне структуре података

„стд::стринг_виев“ игра кључну улогу у дизајнирању меморијско ефикасних структура података. Уместо складиштења више копија стрингова, структуре података могу да складиште „стд::стринг_виев“ инстанце, чиме се смањују трошкови меморије.

#инцлуде <иостреам>
#инцлуде <стринг_виев>

струцт Рецорд {
стд::стринг_виев наме;
инт аге;
} ;

инт маин ( ) {

Записник = { 'Н.Н. лице' , 30 } ;

стд::цоут << 'Име: ' << особа.име << ', Старост: ' << особа.старост << стд::ендл;

повратак 0 ;
}


У овом исечку кода приказујемо коришћење „стд::стринг_виев“ унутар меморијске ефикасне структуре података. Дефинишемо структуру „Рецорд“ која се састоји од члана „стд::стринг_виев“ под називом „наме“ и целобројног члана под називом „аге“. Употреба „стд::стринг_виев“ у овом контексту нам омогућава да креирамо лаку репрезентацију стринга без потребе за додатном алокацијом меморије.

У „маин“ функцији инстанцирамо објекат „Рецорд“ под називом „персон“ са именом „Јохн Дое“ и узрастом од 30 година. Члан „стд::стринг_виев“ „наме“ служи као невласнички поглед на знаковни подаци који одговарају имену, елиминишући потребу за дуплирањем садржаја стринга. „стд::цоут << „Име: ” << персон.наме << “, Аге: ” << персон.аге << стд::ендл;” наредба исписује име и старост особе који се чувају у објекту “Рецорд”.

Закључак

У сталном развоју Ц++ развоја, „стд::стринг_виев“ се истиче као вредан додатак програмерском комплету алата. Примери који су илустровани у овом чланку истичу прилагодљивост и корисност „стд::стринг_виев“ у оквиру Ц++ програмирања. Од ефикасне манипулације стринговима и беспрекорне интероперабилности са застарелим кодом до меморијско ефикасних структура података, „стд::стринг_виев“ је драгоцен за програмере који траже побољшане перформансе и оптимизован код у различитим сценаријима. Ови сценарији из стварног света показују како „стд::стринг_виев“ може да оптимизује код, да смањи непотребно оптерећење меморије и допринесе укупној ефикасности Ц++ апликација.