關於C++初始化int數組
在做題目時,我發現經常使用的memset()在把int數組初始化爲1時失去了作用:
- memset()只能將數組初始化爲-1或0
memset()函數初始化出現問題的原因
memset()本來是用來初始化char型數組的,所以我們可以想到memset()函數是一個個字節對數組進行初始化的。然而,int型的數據佔4個字節。memset()之所以可以把int型數組初始化-1或0,就是因爲他們是特殊情況,他們的二進制補碼分別表示爲全爲1和全爲0,這才導致可以初始化int數組的原因,可如果我想初始化爲1怎麼辦呢。
用C++函數初始化數組
用fill()函數初始化數組
fill()函數的頭文件是#include <algotithm>,下面是代碼塊:
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
int arr[1000];
fill(arr, arr+1000, 1);
return 0;
}
用fill_n()函數初始化數組
fill_n()函數的頭文件同樣是#include<algorithm>,下面是代碼塊:
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
int arr[1000];
fill_n(arr, 1000, 1);
return 0;
}
小方法:只是如果每次不想記住自己的數組開了多大的話,用int s = sizeof(arr)/sizeof(int); 就好。只不過這樣要記住類型。
這個方法可以擴展到其它類型的數組。
初始化二維數組
用arr[SIZE][SIZE]作爲例子。
fill(arr[0], arr[0]+SIZE*SIZE, INF);
INF爲你要填入的數字。