一维,二维,三维数组,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));

 

 

 
上一篇:linux系统弱密码检测


下一篇:地铁重组【dp】