一維,二維,三維數組,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));

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM