Memset() on C++-funktio. Se kopioi yhden merkin tietyn määrän kertoja objektiin. Se on hyödyllinen täytettäessä useita tavuja tietyllä arvolla alkaen tietystä muistipaikasta. Se on määritelty kohdassa otsikkotiedosto.
Syntaksi:
void* memset( void* str, int ch, size_t n);>
Memset() muuntaa arvon ch etumerkittömäksi merkiksi ja kopioi sen str[]:lla osoittaman objektin jokaiseen n ensimmäiseen merkkiin. Jos objekti ei ole triviaalikopioitava (esim. skalaari, taulukko tai C-yhteensopiva rakenne), käyttäytyminen on määrittelemätön. Jos n on suurempi kuin str:n osoittaman objektin koko, käyttäytyminen on määrittelemätön.
Parametrit:
- str[]: Osoita objektia kopioidaksesi merkin.
- ch: Kopioitava merkki. Se voi olla merkki, normaaliarvo sekä looginen arvo.
- n: Kopioitavien tavujen määrä.
Palautusarvo: Memset()-funktio palauttaa str, osoittimen kohdemerkkijonoon.
Aika monimutkaisuus: O(N) [Siirto kohteen alusta loppuun]
Aputilan monimutkaisuus: O(1)
Esimerkki:
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;> }> |
>
>Lähtö
tttttttttttttt>
Huomautus: Voimme käyttää memset():tä asettaaksesi kaikki arvot arvoiksi 0 tai -1 myös integraalisille tietotyypeille. Se ei toimi, jos käytämme sitä muina arvoina. Syy on yksinkertainen, memset toimii tavu tavulta.
unix-yläkomento
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] <<>' '>;> }> |
>
>Lähtö
0 0 0 0 0 -1 -1 -1 -1 -1 84215045 84215045 84215045 84215045 84215045>
Boolen esimerkki:
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> |
>
>Lähtö
1 1 1 1 1 true true true true true>
HUOMAUTUS: Boolen objektin on oltava bool-tyyppinen C++:lle. Esim. bool arr[n];
Memset( ) -funktion edut
1. Lisää luettavuutta
Päätarkoitus memset() tehtävänä on muuttaa koko merkkijonon jokainen merkki tietyksi int arvo ennen sen välittämistä syötteenä. Se on yksirivinen koodinpätkä, mikä tekee siitä erittäin kompaktin ja parantaa yleisesti luettavuutta.
2. Vähennä koodirivejä
Sama tehtävä on saatu aikaan nopeammin kuin työläs tekniikka tätä hyödyntämällä memset() funktio, joka vain hyväksyy syötteen sen sijaan, että silmukoita käytettäisiin tarpeettomasti määrittämään ja muuttamaan merkkijonon jokaisen merkin arvo int arvo.
3. Se on nopeampi
Sama tehtävä on suoritettu nopeasti, toisin kuin aikaa vievä tapa käyttää tätä memset() pelkkä funktion syöte, mikä eliminoi tarpeettomien silmukoiden tarpeen määrittää ja muuntaa kunkin merkin arvoa merkkijono an int arvo.
4. Hyödyllinen päästä eroon kohdistusvirheestä
C++ memset() toiminto auttaa ohjelmoijaa ratkaisemaan kohdistusvirheen. Joissakin tapauksissa huomaat, että prosessorilla on ongelmia tietojen kohdistamisessa, mikä johtaa ohjelmointivirheeseen. The memcpy() ja memcmp() C++:n menetelmät ovat parhaat vaihtoehdot tässä tilanteessa.
Huomautus: memset on vanha funktio, joka on peritty C:stä. Se ei ole kovin joustava täytettäessä muistia erilaisilla tietotyypeillä ja arvoilla. The std::fill toiminto on parempi vaihtoehto saatavilla STL Algorithm -kirjastossa.