C++ Constexpr primjeri nizova

C Constexpr Primjeri Nizova



U ovom će se članku raspravljati o constexpr-u, značajnom dodatku programskom jeziku C++ koji je uveden u C++11 i dodatno poboljšan u C++14, te signalizira kompajleru da je varijabla, funkcija ili konstruktor objekta kompajler- vremenska konstanta. Revolucionirao je način na koji programeri stvaraju i manipuliraju konstantama. Kroz constexpr, programeri mogu definirati izraze i vrijednosti koji su nepromjenjivi i procjenjuju se tijekom kompilacije, a ne tijekom izvođenja. Sveobuhvatna prednost uključivanja constexpr-a u kod je njegova garancija postojanosti.

Čemu služi niz C++ Constexpr?

Korištenje constexpr-a može dovesti do kompaktnijih i optimiziranih izvršnih datoteka. Budući da vrijednosti unaprijed određuje kompilator, dobivene binarne datoteke mogu biti manje, čime se ostvaruje ekonomičnija upotreba resursa sustava, što zauzvrat može poboljšati performanse softvera na različitim platformama. Jedna posebna značajna prednost ove značajke je smanjenje koje donosi u proračunima vremena izvođenja. Kako se vrijednosti izračunavaju tijekom procesa kompilacije kad god je to moguće, procjena vremena izvođenja postaje manje potrebna. Ovo povećanje učinkovitosti ne samo da ubrzava izvršenje, već i pojednostavljuje sveukupne operacije programa.

Primjer 1: Korištenje Constexpr-a u C++ za izračun faktorijela

U ovom primjeru koristit ćemo constexpr koji omogućuje izvođenje izračuna u vrijeme prevođenja, a ne u vrijeme izvođenja. U kontekstu izračunavanja faktorijela, uobičajena matematička operacija, koja je constexpr, može se iskoristiti za izračunavanje vrijednosti faktorijela tijekom kompilacije. Ispitajmo i pregledajmo sljedeći kod, a zatim pogledajmo objašnjenje koda:







#include

constexpr int faktorijel ( int n ) {

povratak n <= 1 ? 1 : ( n * faktorijel ( n - 1 ) ) ;

}

int glavni ( ) {

int na jedan = 5 ;

std :: cout << 'Faktorijel od' << na jedan << ' = ' << faktorijel ( na jedan ) << std :: endl ;

}

Navedeni primjer koda pokazuje upotrebu constexpr-a za izračunavanje faktorijela broja na rekurzivan način. Prevodilac može procijeniti faktorski izraz u vrijeme kompilacije u ovom primjeru jer je faktorska funkcija deklarirana i definirana specifikatorom constexpr. Koristeći constexpr u C++ programu, kompajler procjenjuje faktorijelni izraz 5 u vrijeme kompajliranja, eliminirajući potrebu za računanjem vremena izvođenja.



Pogledajmo sada detaljnu raščlambu koda s određenim detaljima i objašnjenjima.



Prvo koristimo #include za uključivanje datoteke zaglavlja 'iostream' koja pruža bitne ulazne i izlazne funkcionalnosti poput 'std::cout' za ispis na konzolu.





Nakon toga, prelazimo na funkciju factorial() (rekurzivnu) koja je 'constexpr int factorial(int n)'. Ova funkcija factorial() definira rekurzivnu funkciju koja izračunava faktorijel cijelog broja 'n'. Constexpr implicira da optimizacije performansi mogu rezultirati procjenom funkcije tijekom kompilacije.

Povrat n <= 1 ? 1 : (n * faktorijel(n – 1)) redak koristi uvjetni izraz za rekurziju koji kaže da ako je 'n' manje ili jednako 1, vraća 1 (osnovni slučaj). Ako nije, izračunava faktorijel (n! = n * (n-1)!), što je opća formula za izračunavanje faktorijela, ponavljajući se pozivom s 'n – 1' i zatim množenjem rezultata s 'n ”. Ove linije djeluju kao vratar za izračun faktorijela. Provjerava je li broj na osnovnoj razini i vraća 1 ako jest. Ako nije, pokreće se lančana reakcija poziva funkcija, pri čemu svaki radi na manjim brojevima dok se ne dosegne osnovni slučaj. Zatim se rezultati množe obrnutim redoslijedom. Sljedeći je izlaz koda za vašu referencu:



Primjer 2: Brojanje malih slova za demonstraciju C++ Constexpr niza

Ovdje ćemo naučiti kako prebrojati broj malih slova pomoću niza countexpr. U ovom primjeru, svrha je prebrojati broj malih slova u danom nizu pomoću značajke constexpr kako bi se smanjilo vrijeme izvođenja. Funkcija countLowercase(), deklarirana kao constexpr, uzima niz 'string_view' kao svoj parametar i ponavlja svaki znak zadanog niza kao ulaz. Za svako malo slovo na koje naiđemo, broj se povećava. Rezultat se tada dobiva u vrijeme kompajliranja jer funkcija radi na konstantnim izrazima, pokazujući učinkovitost i prednosti izvedbe procjene tijekom kompilacije. Najprije provjerite sljedeći kôd. Zatim prijeđite na detaljno objašnjenje:

#include
#include
koristeći prostor imena std ;
constexpr veličina_t brojati Mala slova ( prikaz_stringa s ) {
veličina_t računati = 0 ;
za ( char c : s ) {
ako ( je niži ( c ) ) {
računati ++;
}
}
povratak računati ;
}
int glavni ( ) {
cout << 'Ukupno mala slova u ' Mala slova 'su ='
<< brojati Mala slova ( 'Mala slova' ) << endl ;
}

Evo detaljne raščlambe koda s objašnjenjem svakog retka:

#include uključen je za korištenje standardne ulazno/izlazne biblioteke toka za ispis poruka. #include uključuje klasu “string_view” za učinkovitu manipulaciju nizovima.

U funkciji countLowercase(), funkcija “constexpr size_t countlower(string_view s)” broji mala slova u zadanom prikazu niza. Int main() je ulazna točka programa koja ispisuje poruku koja označava broj malih slova u 'LoWeR CaSe LETtErS' i poziva funkciju countLowercase() s 'LoWeR CaSe LeTtErS' kao ulazom i ispisuje rezultat. Pogledajte sljedeći izlaz programa:

Primjer 3: Demonstracija polja korištenjem C++ Constexpr

Demonstracija niza pokazuje kako se nizovi koji su strukturirane zbirke elemenata iste vrste podataka stvaraju, kako im se pristupa i kako se njima manipulira unutar programskog jezika. U nastavku ćemo objasniti kroz primjer kodiranja u kojem program pruža jednostavan primjer inicijalizacije i manipulacije nizom tijekom kompilacije.

Demonstracija nizova ilustrira koncept nizova—strukturiranu zbirku elemenata koji dijele isti tip podataka—i način na koji se oni mogu stvoriti, kako im se može pristupiti i njima se može manipulirati pomoću programskog jezika. U sljedećem primjeru kodiranja pokazat ćemo kako inicijalizirati niz u vrijeme prevođenja, izračunati njegovu veličinu i ispisati elemente zadanog niza. Pogledajte sljedeći kod i prijeđite na objašnjenje:

#include
koristeći prostor imena std ;
int glavni ( ) {
constexpr int arrayint [ 9 ] = { 5 , 55 , 555 , 5555 , 55555 } ;
constexpr int niz_veličine = veličina arrayint / veličina ( int ) ;
cout << 'Duljina niza je = ' << niz_veličine << endl ;
cout << 'Elementi u nizu su = ' ;
za ( int ja = 0 ; ja < niz_veličine ; ++ ja ) {
cout << arrayint [ ja ] << ' ' ;
}
}

Ovaj program inicijalizira niz constexpr, izračunava njegovu duljinu tijekom kompajliranja, a zatim ispisuje duljinu i elemente niza na konzoli. Constexpr osigurava da se niz i njegova svojstva određuju tijekom kompajliranja. Razbijmo kod i objasnimo specifične detalje jedan po jedan:

Za uključivanje standardne ulazno-izlazne biblioteke toka, dopuštajući korištenje funkcija poput 'cout' za izlaz, poziva se #include . Program počinje izvršavanje od int main() funkcije. Unutar funkcije main() definiran je niz 'arrayint[]', koji ima veličinu 9 s naredbom constexpr int arrayint[9]. Niz je inicijaliziran s pet brojeva, a preostali elementi su implicitno ostali 0. Int length_a = sizeof arrayint / sizeof(int); izračunava veličinu 'arrayint' u bajtovima.

Petlja 'for' iterira kroz elemente niza 'arrayint[]', a vrijednosti se zatim ispisuju na konzolu. Pogledajmo sljedeći izlaz zadanog koda:

Zaključak

Uvođenje i evolucija ključne riječi constexpr u C++ revolucionirali su način na koji se rukuje konstantnim izrazima i vrijednostima. Ovaj članak istraživao je tri praktična primjera, prikazujući snagu constexpr-a u računanju faktorijela, brojanju malih slova i inicijalizaciji nizova tijekom kompajliranja. Ključni zaključci uključuju poboljšane performanse, smanjeno vrijeme izvođenja proračuna i poboljšanu učinkovitost memorije. Constexpr je dragocjeno sredstvo za stvaranje pouzdanih, stalnih entiteta unutar baze koda, osiguravajući nepromjenjivost i doprinoseći modernijim i učinkovitijim programima.