logo

Memset C++

Memset() yra C++ funkcija. Jis nukopijuoja vieną simbolį tam tikrą skaičių kartų į objektą. Tai naudinga norint užpildyti baitų skaičių tam tikra reikšme, pradedant nuo konkrečios atminties vietos. Jis apibrėžtas antraštės failą.

Sintaksė:



void* memset( void* str, int ch, size_t n);>

Memset () paverčia reikšmę ch į nepažymėtą char ir nukopijuoja ją į kiekvieną iš pirmųjų n objekto simbolių, į kuriuos nukreipia str[]. Jei objektas nėra trivialiai nukopijuojamas (pvz., skaliarinis, masyvas arba su C suderinama struktūra), elgsena neapibrėžta. Jei n yra didesnis nei objekto, į kurį nurodo str, dydis, elgsena neapibrėžta.

Parametrai:

  • str[]: Nukreipkite žymiklį į objektą, kad nukopijuotumėte simbolį.
  • ch: Simbolis, kurį reikia kopijuoti. Tai gali būti simbolis, normalioji reikšmė ir loginė reikšmė.
  • n: Kopijuotinų baitų skaičius.

Grąžinimo vertė: Funkcija memset() grąžina str, žymeklį į paskirties eilutę.



Laiko sudėtingumas: O(N) [Skryžiavimui nuo objekto pradžios iki galo]
Pagalbinės erdvės sudėtingumas: O(1)

Pavyzdys:

C++






// C++ program to demonstrate memset> #include> #include> using> namespace> std;> // Driver Code> int> main()> {> >char> str[] =>'geeksforgeeks'>;> >memset>(str,>'t'>,>sizeof>(str));> >cout << str;> >return> 0;> }>

>

>

Išvestis

tttttttttttttt>

Pastaba: Mes galime naudoti memset (), kad nustatytume visas reikšmes kaip 0 arba -1 ir integruotiems duomenų tipams. Jis neveiks, jei naudosime jį kaip kitas vertes. Priežastis paprasta, memset veikia baitas po baito.

lentynų šunys

C++




// C++ Program to demonstrate that we can use memset() to> // set all values as 0 or -1 for integral data types also> #include> using> namespace> std;> // Driver Code> int> main()> {> >int> a[5];> >// all elements of A are zero> >memset>(a, 0,>sizeof>(a));> >for> (>int> i = 0; i <5; i++)> >cout << a[i] <<>' '>;> >cout << endl;> >// all elements of A are -1> >memset>(a, -1,>sizeof>(a));> >for> (>int> i = 0; i <5; i++)> >cout << a[i] <<>' '>;> >cout << endl;> >// Would not work> >memset>(a, 5,>sizeof>(a));>// WRONG> >for> (>int> i = 0; i <5; i++)> >cout << a[i] <<>' '>;> }>

>

>

Išvestis

0 0 0 0 0 -1 -1 -1 -1 -1 84215045 84215045 84215045 84215045 84215045>

Būlio pavyzdys:

C++




// C++ Program to demonstrate that we can use memset() to> // set all values as boolean data types also> #include> using> namespace> std;> int> main()> {> >bool> prime[5];> >memset>(prime,>true>,>sizeof>(prime));> >// If you print without using boolalpha it will print> >// like this> >for> (>int> i = 0; i <5; i++)> >cout << prime[i] <<>' '>;> >cout <<>' '>;> >// If you use boolalpha it will print like this> >for> (>int> i = 0; i <5; i++)> >cout << boolalpha << prime[i] <<>' '>;> >return> 0;> }> // This code is contributed by Susobhan Akhuli>

>

>

Išvestis

1 1 1 1 1 true true true true true>

PASTABA: Būlio atveju objektas turi būti bool tipo C++. Pvz. bool arr[n];

Funkcijos memset( ) pranašumai

1. Padidinkite skaitomumą

Pagrindinis tikslas memset () funkcija yra paversti kiekvieną visos eilutės simbolį į konkretų tarpt reikšmę prieš perduodant ją kaip įvestį. Tai vienos eilutės kodas, todėl jis yra labai kompaktiškas ir pagerina skaitomumą.

2. Sumažinkite kodo eilutes

Ta pati užduotis buvo atlikta greičiau nei sudėtinga technika naudojant šią memset () funkcija, kuri tiesiog priima įvestį, o ne nereikalingą kilpų naudojimą, kad būtų priskirta ir konvertuojama kiekvieno eilutės simbolio reikšmė į tarpt vertė.

3. Tai greičiau

Ta pati užduotis buvo atlikta greitai, o ne naudojant tai daug laiko memset () vien tik funkcijos įvestis, todėl nereikia nereikalingų kilpų, norint priskirti ir konvertuoti kiekvieno simbolio reikšmę styga į an tarpt vertė.

4. Naudinga norint atsikratyti nesutapimo problemos

C++ memset () funkcija padeda programuotojui išspręsti nesutapimo problemą. Pasitaiko atvejų, kai pastebite, kad procesoriui kyla problemų dėl duomenų derinimo, todėl įvyksta programavimo klaida. The memcpy () ir memcmp () C++ metodai šioje situacijoje yra geriausi variantai.

Pastaba: memset yra sena funkcija, paveldėta iš C. Ji nėra labai lanksti pildant atmintį skirtingais duomenų tipais ir reikšmėmis. The std::užpildykite funkcija yra geresnė alternatyva, kurią galima rasti STL Algorithm bibliotekoje.