一维,二维,三维数组,vector 初始化
1. 用memset初始化数组:
1)按照字节赋值
2)头文件在<cstring>中
注:由于memset函数是按照字节赋值的,所以对int型数组用该函数时,只能是0或-1,否则会出错,这里,不管数组是多少维的,语法均为:
int dp[84][84][84][2]; memset(dp, 0, sizeof(dp)); //只能赋值0或-1
2. fill 初始化vector和数组:
1)按照变量类型单元赋值,将区间 [first, end) 中的每个单元都赋为同一个值。
2)头文件在<algorithm>中
// fill algorithm example #include <iostream> // std::cout #include <algorithm> // std::fill #include <vector> // std::vector int main () { std::vector<int> myvector (8); // myvector: 0 0 0 0 0 0 0 0 std::fill (myvector.begin(),myvector.begin()+4,5); // myvector: 5 5 5 5 0 0 0 0 std::fill (myvector.begin()+3,myvector.end()-2,8); // myvector: 5 5 5 8 8 8 0 0 std::cout << "myvector contains:"; for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it) std::cout << ' ' << *it; std::cout << '\n'; return 0; }
直接给一维数组赋值:
int a[4] = {1, 1, 1, 1}; fill(a, a+2, 284); // 284 284 1 1
要给多维数组赋值时,这里的区间[first, end)都是指针地址,并且是一维的,由于多维数组在内存空间中连续性,可将(int ****)的变量类型dp转化为(int *)类型,得到了dp的首地址,然后按照其区间给其赋值。
参看如下赋值方法:
int dp[84][84][84][2]; fill((int*)dp, (int*)dp + 84 * 84 * 84 * 2, 0);
也可以这样将二维数组赋值:
int dp[84][84]; fill(dp[0], dp[0] + 84 * 84 , 0);
3. vector 初始化:
1) 在定义v2时初始化:以下两种方式等价 ,v2 初始化为 v1 的拷贝,两者的必须类型相同,也就是同为int的vector类型,v2将具有和v1相同的容量和元素。
vector<int> v2(v1);
vector<int> v2 = v1;
2)将v1的某段复制给v2:
vector<int> v2(v1.begin()+2,v1.end());
int a[5] = {1,2,3,4,5}; //通过数组a的地址初始化,注意地址是从0到5(左闭右开区间) vector<int> b(a, a+5);
3) 指定值初始化,ilist5被初始化为包含7个值为3的int
vector<int> ilist5(7,3);
4) 初始化二维vector为n行m列,值为0:
vector<vector<int>> v(n, vector<int>(m, 0));