C 的二維vector和C的二維陣列學習

2021-08-17 05:30:50 字數 2679 閱讀 4818

參考了

可通過下列**直接建立m*n的二維vector

vector> ivec(m ,vector(n));    //m*n的二維vector

動態建立m*n的二維vector

方法一:

vector> ivec;

ivec.resize(m);

for(int i=0;i> ivec;

ivec.resize(m,vector(n));

動態建立二維陣列a[m][n]

c語言版:

建立**:

#includeint **a=(int **)malloc(m*sizeof(int *));

for(int i=0;i釋放**:

for (i=0;i

c++版:

建立**:

int **a=new int*[m];

for(int i=0;i釋放**:

for(int i = 0; i != m; i++)

delete p;

初始化二維陣列:

int a[2][2] = ,
};
初始化二維vector:

如果全初始化為0:

vector> ivec(m ,vector(n,0));    //m*n的二維vector,所有元素為0
也可以用

vector> a;

a.resize(m, vector(n, 0));

注意:上例中n固定。但二維vector的第二維的size()並不一定要是常數,如下例中的三個vector組成的二維vector,其大小分別為1,2,3。這一點跟c的二維陣列不一樣。

vector> vecset;

for(int i = 1; i <= 3; i++)

vecset.push_back(vector(i,0));

如果初始化為不同值:

vector> a , };

注意與上面的c的二維陣列區別,這裡a的後面加不加'='號都可以

如果c++的class裡面定義了vector,可以在class的constructor裡面初始化,比如:

class myclass 

...private:

vectorv1, v2;

}

如果想遍歷二維vector(按vector乙個乙個來),可以用c++ 11的auto,比如

#include #include using namespace std;

int main() , };

for (const auto& inner : v)

} cout << endl;

return 0;

}

定義乙個二維陣列,第一維有26個,但第二維不定。

vector> vecs(26, vector());
三維vector怎麼定義呢? 乙個例子如下

vector> > dp (n, vector>(n, vector(n + 1, false)));
二維vector的初始化如下:

假設已經有vector> board;

vector> mask(board.size(), vector(board[0].size(), true));

下面是一些關於c/c++ 二維陣列初始化的資料,引用自

二維陣列的初始化可以按行分段賦值,也可按行連續賦值。

例如,對於陣列 a[5][3],按行分段賦值應該寫作:

int a[5][3]=, , , ,  };
按行連續賦值應該寫作:

int a[5][3]=;
這兩種賦初值的結果是完全相同的。

對於二維陣列的初始化還要注意以下幾點:

1) 可以只對部分元素賦值,未賦值的元素自動取「零」值。例如:

int a[3][3] = , , };
是對每一行的第一列元素賦值,未賦值的元素的值為 0。賦值後各元素的值為:

1  0  0

2  0  0

3  0  0

再如:

int a[3][3] = , , };
賦值後各元素的值為:

0  1  0

0  0  2

3  0  0

2) 如果對全部元素賦值,那麼第一維的長度可以不給出。例如:

int a[3][3] = ;
可以寫為:

int a[3] = ;
3) 二維陣列可以看作是由一維陣列巢狀而成的;如果乙個陣列的每個元素又是乙個陣列,那麼它就是二維陣列。當然,前提是各個元素的型別必須相同。根據這樣的分析,乙個二維陣列也可以分解為多個一維陣列,c語言允許這種分解。

例如,二維陣列a[3][4]可分解為三個一維陣列,它們的陣列名分別為 a[0]、a[1]、a[2]。

這三個一維陣列可以直接拿來使用。這三個一維陣列都有 4 個元素,比如,一維陣列 a[0] 的元素為 a[0][0]、a[0][1]、a[0][2]、a[0][3]。

C 二維vector使用

在stl中vector這一容器,無論是在封裝程度還是記憶體管理等方面都由於傳統c 中的陣列。本文主要是關於使用vector初始化 遍歷方面的內容。其他二維的思想也是類似的。int p p new int 10 注意,int 10 表示乙個有10個元素的指標陣列 for int i 0 i 10 i ...

二維vector 的建立

在很多時候,類中二維陣列的維度往往無法提前知道,因此需要動態地分配空間。使用new運算子是其中的乙個解決方案,但是操作不當往往會造成記憶體溢位 洩漏。使用stl的vector可以避免這個麻煩。例如,我在乙個類中定義了乙個資料成員a為二維int型別vector cpp view plain copy ...

二維向量 vector

又學一招!二維向量vector 在vc下的使用技巧。隨著對c 學習的逐步加深,發現stl確實是個好咚咚。vector是我用到的第乙個stl容器,它一直吸引我學習和使用stl。但當我用到二維的vector時 比如 vector 卻發現似乎不能用。我用的vc6就是不認它,竟報 error c2146 s...