logo

C++ の Memset

Memset() は C++ 関数です。単一の文字を指定された回数だけオブジェクトにコピーします。これは、特定のメモリ位置から開始して、指定された値で多数のバイトを埋める場合に便利です。で定義されています ヘッダファイル。

構文:



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

メムセット() 値 ch を unsigned char に変換し、それを str[] が指すオブジェクトの最初の n 文字のそれぞれにコピーします。オブジェクトが簡単にコピーできない場合 (スカラー、配列、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>

注記: ブール値の場合、オブジェクトは C++ のブール型である必要があります。例えば。 bool arr[n];

memset( ) 関数の利点

1. 可読性の向上

主な目的は、 memset() 関数は、文字列全体の各文字を特定の文字に変換することです。 整数 値を入力として渡す前に。これは 1 行のコードであるため、非常にコンパクトになり、全体的な可読性が向上します。

2. コード行を減らす

これを利用することで、同じ作業を手間のかかる手法よりも早く完了できるようになりました。 memset() この関数は、文字列内の各文字の値を割り当てて値に変換するためにループを不必要に使用するのではなく、入力を受け入れるだけです。 整数 価値。

3. より高速です

これを使用すると、時間のかかる方法とは対照的に、同じタスクが迅速に完了します。 memset() 関数の入力のみで実行できるため、関数内の各文字の値を割り当てて変換するための不必要なループが不要になります。 整数 価値。

4. 位置ずれの問題を解決するのに役立ちます

C++ memset() この関数は、プログラマが位置ずれの問題を解決するのに役立ちます。プロセッサーのデータ配置に問題があり、その結果プログラミングミスが発生することが判明する場合があります。の memcpy() そして memcmp() この状況では、C++ のメソッドが最適なオプションです。

注記: memset は C から継承された古い関数です。異なるデータ型と値でメモリを埋める場合にはあまり柔軟性がありません。の std::fill この関数は、STL アルゴリズム ライブラリで利用できるより良い代替手段です。