1、循环法
//一维数组循环初始化
for(int i=0;i<=N;i++)
a[i]=1;
//二维数组循环初始化
for(int i=0;i<=N;i++)
for(int j=0;j<=N;j++)
a[i][j]=1;
总结:
就是一顿无脑的循环,一维就一层,二维就二层,三维就三层,无脑,太无脑,浪费手指头。
2、memset法
局限性很强,但网友们大量使用,事实标准。
按照字节填充某字符。因为memset函数按照字节填充,所以一般memset只能用来填充char
型数组,(因为只有char型占一个字节)如果填充int
型数组,除了0
和-1
,其他的不能。因为只有00000000 = 0
,-1
同理,如果我们把每一位都填充"1",会导致变成填充入11111111
。
memset
的使用方法是:
#include <iostream>
#include <cstring>
using namespace std;
int main(){
int a[20];
memset(a, 0, sizeof a);
return 0;
}
3、fill法
fill
函数可以赋值任何,而且使用方法特别简便:
例如int数组:fill(arr, arr + n, 要填入的内容);
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
int arr[10];
fill(arr, arr + 10, 2);
return 0;
}
vector
也可以:fill(v.begin(), v.end(), 要填入的内容);
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
vector<int> v{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
fill(v.begin(), v.end(), -1);
return 0;
}
fill
填充二维(多维也是一样)的方法:
fill(a[0],a[0]+m*n,1)
参数的类型和上面的一样,这里唯一值得注意的是第一个起始地址,
(1) 二维数组,它的第一个数值的表达是 a[0][0]
,而它的地址就可以用a[0]
来表示。
(2) 三维数组,它的第一个数值的表达是 a[0][0][0]
,而它的地址就可以用a[0][0]
来表示。
//二维数组初始化为1
fill(a[0], a[0] + N * N , 1);
//三维数组初始化为1
fill(a[0][0], a[0][0] + N * N * N, 1);
4、总结
memset
主要对数组进行赋值,且对int
型数组,只能赋值为0
和-1
。
fill
函数可以对数组或其他容器,进行赋值,值可以任意。
fill
和memset
都作用于int
型数组上时,fill方法速度较慢。