logo

Memset v C++

Memset() je funkcia C++. Skopíruje jeden znak určený počet krát do objektu. Je to užitočné na vyplnenie určitého počtu bajtov danou hodnotou počnúc od konkrétneho miesta v pamäti. Je definovaný v hlavičkový súbor.

Syntax:



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

Memset() konvertuje hodnotu ch na unsigned char a skopíruje ju do každého z prvých n znakov objektu, na ktorý ukazuje str[]. Ak objekt nie je triviálne kopírovateľný (napr. skalárny, pole alebo štruktúra kompatibilná s C), správanie nie je definované. Ak je n väčšie ako veľkosť objektu, na ktorý ukazuje str, správanie nie je definované.

Parametre:

  • str[]: Ukazovateľ na objekt skopíruje znak.
  • ch: Postava na kopírovanie. Môže to byť znak, normálna hodnota aj booleovská hodnota.
  • n: Počet bajtov na kopírovanie.

Návratová hodnota: Funkcia memset() vracia str, ukazovateľ na cieľový reťazec.



Časová zložitosť: O(N) [Pre prechod od začiatku do konca objektu]
Zložitosť pomocného priestoru: O(1)

Príklad:

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

>

>

Výkon

tttttttttttttt>

Poznámka: Môžeme použiť memset() na nastavenie všetkých hodnôt ako 0 alebo -1 aj pre integrálne dátové typy. Nebude to fungovať, ak ho použijeme na nastavenie ako iné hodnoty. Dôvod je jednoduchý, memset funguje bajt po bajte.

typ dátumu strojopisu

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

>

>

Výkon

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

Booleovský príklad:

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>

>

>

Výkon

1 1 1 1 1 true true true true true>

POZNÁMKA: Pre boolean musí byť objekt typu bool pre C++. Napr. bool arr[n];

Výhody funkcie memset().

1. Zvýšte čitateľnosť

Hlavným účelom memset() funkciou je transformovať každý znak celého reťazca na špecifický int hodnotu pred jej odovzdaním ako vstupom. Ide o jednoriadkový kód, vďaka čomu je veľmi kompaktný a celkovo zlepšuje čitateľnosť.

2. Znížte počet riadkov kódu

Rovnaká úloha bola vykonaná rýchlejšie ako pracná technika s využitím tohto memset() funkcia, ktorá iba prijíma vstup, a nie zbytočné používanie slučiek na priradenie a konverziu hodnoty každého znaku v reťazci na int hodnotu.

3. Je to rýchlejšie

Rovnaká úloha bola vykonaná rýchlo, na rozdiel od časovo náročného spôsobu použitia tohto memset() samotný vstup funkcie, čo eliminuje potrebu zbytočných slučiek na priradenie a konverziu hodnoty každého znaku v reťazec do an int hodnotu.

4. Užitočné pri odstraňovaní problému nesprávneho zarovnania

Jazyk C++ memset() funkcia pomáha programátorovi pri riešení problému nesúosovosti. Existujú prípady, keď zistíte, že procesor má problémy so zarovnaním údajov, čo vedie k programovacej chybe. The memcpy() a memcmp() metódy v C++ sú v tejto situácii najlepšími možnosťami.

Poznámka: memset je stará funkcia zdedená z C. Nie je veľmi flexibilná pri napĺňaní pamäte rôznymi typmi údajov a hodnotami. The std::fill funkcia je lepšia alternatíva dostupná v knižnici algoritmov STL.