Memset в C++

Memset() – це функція C++. Він копіює один символ на об’єкт певну кількість разів. Це корисно для заповнення певної кількості байтів заданим значенням, починаючи з певного місця пам’яті. Це визначено в файл заголовка.

Синтаксис:

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

Memset() перетворює значення ch на unsigned char і копіює його в кожен із перших n символів об’єкта, на який вказує str[]. Якщо об’єкт не можна тривіально копіювати (наприклад, скаляр, масив або C-сумісна структура), поведінка є невизначеною. Якщо n більше розміру об'єкта, на який вказує str, поведінка не визначена.

Параметри:

  • str[]: Вказівник на об’єкт для копіювання символу.
  • ch: Символ для копіювання. Це може бути символ, звичайне значення, а також логічне значення.
  • n: Кількість байтів для копіювання.

Повернене значення: Функція memset() повертає str, вказівник на цільовий рядок.

Часова складність: O(N) [Для проходу від початку до кінця об'єкта]
Складність допоміжного простору: О(1)

приклад:

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

Вихід

tttttttttttttt 

Примітка: Ми можемо використовувати memset(), щоб встановити всі значення як 0 або -1 для інтегральних типів даних. Це не спрацює, якщо ми використовуємо його для встановлення інших значень. Причина проста, memset працює побайтно.

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

Вихід

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

Логічний приклад:

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>

Вихід

1 1 1 1 1 true true true true true 

ПРИМІТКА: Для boolean об’єкт має бути типу bool для C++. напр. bool arr[n];

Переваги функції memset().

1. Підвищення читабельності

Основне призначення memset() функція полягає в перетворенні кожного символу цілого рядка в певний внутр значення, перш ніж передати його як вхідні дані. Це однорядковий фрагмент коду, що робить його дуже компактним і покращує загальну читабельність.

2. Зменшіть кількість рядків коду

Те саме завдання було виконано швидше, ніж трудомістка техніка, використовуючи це memset() функція, яка лише приймає вхідні дані, а не непотрібне використання циклів для призначення та перетворення значення кожного символу в рядку в внутр значення.

3. Це швидше

Те ж саме завдання було виконано швидко, а не трудомістким способом за допомогою цього memset() тільки введення функції, що усуває потребу в непотрібних циклах для призначення та перетворення значення кожного символу в рядок до ан внутр значення.

4. Корисно для усунення проблеми зміщення

C++ memset() функція допомагає програмісту вирішити проблему зміщення. Бувають випадки, коли ви виявляєте, що процесор має проблеми з вирівнюванням даних, що призводить до помилки програмування. The memcpy() і memcmp() методи в C++ є найкращими варіантами в цій ситуації.

Примітка: memset — стара функція, успадкована від C. Вона не дуже гнучка при заповненні пам’яті різними типами даних і значеннями. The std::fill функція є кращою альтернативою, доступною в бібліотеці алгоритмів STL.