關於初始化int數組

關於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爲你要填入的數字。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章