配列の初期化とmemset
配列の初期化とmemset
配列の初期化について蟻本P174にmemsetという関数がでてきました。
手元のC++の入門書には載っていない関数でした。
これまで配列の初期化をするときにはforループを回して初期化値を挿入していましたが、この関数を使うと簡単にできそうです。
コード例
#include <bits/stdc++.h> using namespace std; int main(){ int dp[10][10]; memset(dp,-1,sizeof(dp)); for(int i=0;i<10;i++){ for(int j=0;j<10;j++){ cout<<dp[i][j]; } cout<<endl; } return 0; }
出力
-1-1-1-1-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1
応用
先のコードのmemsetの最後の引数をint 1個分4(bite)にしてみました。
最初の1個だけが-1になりました。
なお最初にint dp[10][10]={};で0埋めしておかないとぐちゃぐちゃになりました。
int main(){ int dp[10][10]={}; memset(dp,-1,4); for(int i=0;i<10;i++){ for(int j=0;j<10;j++){ cout<<dp[i][j]; } cout<<endl; } return 0; }
出力例
-1000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000
memsetの引数
memsetの引数に関するwikipediaの説明です。
#include
void *memset(void *buf, int c, size_t n);bufはunsigned char *型にキャストされる。cはunsigned char型にキャストされる。