Memset() jest funkcją C++. Kopiuje do obiektu pojedynczy znak określoną liczbę razy. Przydaje się do wypełnienia określonej liczby bajtów określoną wartością, zaczynając od określonego miejsca w pamięci. Jest zdefiniowany w plik nagłówkowy.
Składnia:
void* memset( void* str, int ch, size_t n);>
Memset() konwertuje wartość ch na unsigned char i kopiuje ją do każdego z pierwszych n znaków obiektu wskazywanego przez str[]. Jeśli obiektu nie można w prosty sposób skopiować (np. skalar, tablica lub struktura zgodna z C), zachowanie jest niezdefiniowane. Jeśli n jest większe niż rozmiar obiektu wskazywanego przez str, zachowanie jest niezdefiniowane.
Parametry:
- str[]: Wskaźnik na obiekt, do którego chcesz skopiować znak.
- ch: Znak do skopiowania. Może to być znak, wartość normalna lub wartość logiczna.
- N: Liczba bajtów do skopiowania.
Wartość zwracana: Funkcja memset() zwraca str, wskaźnik do ciągu docelowego.
Złożoność czasowa: O(N) [Dla przejścia od początku do końca obiektu]
Złożoność przestrzeni pomocniczej: O(1)
Przykład:
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;> }> |
>
>Wyjście
tttttttttttttt>
Notatka: Możemy użyć memset() do ustawienia wszystkich wartości na 0 lub -1 również w przypadku całkowitych typów danych. Nie zadziała, jeśli użyjemy go do ustawienia innych wartości. Powód jest prosty, memset działa bajt po bajcie.
jakie są wymiary ekranu mojego komputera
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] <<>' '>;> }> |
>
>Wyjście
0 0 0 0 0 -1 -1 -1 -1 -1 84215045 84215045 84215045 84215045 84215045>
Przykład logiczny:
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> |
>
>Wyjście
1 1 1 1 1 true true true true true>
NOTATKA: W przypadku wartości logicznej obiekt musi być typu bool w przypadku języka C++. Np. bool tablica [n];
Zalety funkcji memset().
1. Zwiększ czytelność
Głównym celem memset() funkcją jest przekształcenie każdego znaku całego ciągu znaków w konkretny wew wartość przed przekazaniem jej jako danych wejściowych. Jest to jednoliniowy fragment kodu, dzięki czemu jest bardzo zwarty i ogólnie poprawia czytelność.
2. Zmniejsz liczbę linii kodu
Dzięki temu to samo zadanie udało się osiągnąć szybciej niż w przypadku pracochłonnej techniki memset() funkcja, która po prostu akceptuje dane wejściowe, zamiast niepotrzebnego używania pętli do przypisywania i konwertowania wartości każdego znaku w ciągu na wew wartość.
3. Jest szybszy
Dzięki temu to samo zadanie zostało wykonane szybko, a nie w sposób czasochłonny memset() samego wejścia funkcji, co eliminuje potrzebę wykonywania niepotrzebnych pętli w celu przypisania i konwersji wartości każdego znaku w strunowy do wew wartość.
4. Przydatne w pozbyciu się problemu niewspółosiowości
Język C++ memset() Funkcja pomaga programiście w rozwiązaniu problemu niewspółosiowości. Zdarzają się przypadki, w których odkryjesz, że procesor ma problemy z wyrównaniem danych, co skutkuje błędem programistycznym. The memcpy() I memcmp() metody w C++ są najlepszymi opcjami w tej sytuacji.
Notatka: memset to stara funkcja odziedziczona z C. Nie jest zbyt elastyczna przy wypełnianiu pamięci różnymi typami danych i wartościami. The std::wypełnij funkcja jest lepszą alternatywą dostępną w bibliotece algorytmów STL.