logo

Memset v C++

Memset() je funkcija C++. En znak kopira določeno število krat v predmet. Uporaben je za polnjenje števila bajtov z dano vrednostjo, začenši z določene pomnilniške lokacije. Opredeljena je v naslovna datoteka.

Sintaksa:



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

Memset() pretvori vrednost ch v nepredznačeni char in jo prekopira v vsakega od prvih n znakov objekta, na katerega kaže str[]. Če objekta ni mogoče trivialno kopirati (npr. skalar, niz ali struktura, združljiva s C), je vedenje nedefinirano. Če je n večji od velikosti predmeta, na katerega kaže str, je vedenje nedefinirano.

Parametri:

  • str[]: Kazalec na predmet za kopiranje znaka.
  • ch: Znak za kopiranje. Lahko je znak, običajna vrednost ali logična vrednost.
  • n: Število bajtov za kopiranje.

Vrnjena vrednost: Funkcija memset() vrne str, kazalec na ciljni niz.



Časovna zapletenost: O(N) [Za premik od začetka do konca objekta]
Kompleksnost pomožnega prostora: O(1)

primer:

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;> }>

>

>

Izhod

tttttttttttttt>

Opomba: Uporabimo lahko memset(), da vse vrednosti nastavimo na 0 ali -1 tudi za integralne vrste podatkov. Ne bo delovalo, če ga uporabimo za nastavitev drugih vrednosti. Razlog je preprost, memset deluje bajt za bajtom.

kako odpreti datoteko z javo

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] <<>' '>;> }>

>

>

Izhod

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

Logični primer:

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>

>

>

Izhod

1 1 1 1 1 true true true true true>

OPOMBA: Za logično vrednost mora biti objekt tipa bool za C++. Npr. bool arr[n];

Prednosti funkcije memset().

1. Povečajte berljivost

Glavni namen memset() funkcija je pretvorba vsakega znaka celotnega niza v specifičen int vrednost, preden jo posredujete kot vhod. Je enovrstični kos kode, zaradi česar je zelo kompakten in na splošno izboljša berljivost.

2. Zmanjšajte število vrstic kode

Ista naloga je bila z uporabo tega opravljena hitreje kot zahtevna tehnika memset() funkcijo, ki samo sprejme vnos, namesto nepotrebne uporabe zank za dodeljevanje in pretvorbo vrednosti vsakega znaka v nizu v int vrednost.

3. Je hitrejši

Ista naloga je bila opravljena hitro v nasprotju z zamudnim načinom z uporabo tega memset() samo vnos funkcije, kar odpravlja potrebo po nepotrebnih zankah za dodeljevanje in pretvorbo vrednosti vsakega znaka v vrvica do an int vrednost.

4. Uporabno pri odpravljanju težave z neusklajenostjo

C++ memset() funkcija pomaga programerju pri reševanju težave z neusklajenostjo. Obstajajo primeri, ko odkrijete, da ima procesor težave s poravnavo podatkov, kar povzroči programsko napako. The memcpy() in memcmp() metode v C++ so najboljše možnosti v tej situaciji.

Opomba: memset je stara funkcija, podedovana iz C. Ni zelo prilagodljiva pri polnjenju pomnilnika z različnimi tipi podatkov in vrednostmi. The std::fill funkcija je boljša alternativa, ki je na voljo v knjižnici algoritmov STL.