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));