動態建立二維vector陣列

2021-07-04 13:13:43 字數 1819 閱讀 9126



// m*n的二維vector

vector> ivec(m , vector(n));   

// 動態建立m*n的二維vector

// 方法一:

vector> ivec;

ivec.resize(m);

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

ivec[i].resize(n);

// 方法二:

vector> ivec;

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

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

// c語言版:

#include

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

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

a[i] = (int *) malloc(n * sizeof(int));

// c++版:

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

for (int i = 0; i < m; i++)  a[i] = new int[n]; 

// 初始化二維陣列

vector> ivec(m , vector(n, 0));   

// m*n的二維vector,所有元素為0

二維陣列名做引數傳遞問題

在用二維陣列名作為引數傳遞時容易出現segmention error。這是因為不能正確為二維陣列中元素定址的問題,正確的方法如下:

1. 用指向一維陣列的指標變數,如下例子所示:

#include

#include

#define n   4

void testarr(int (*a)[n], int m)}

int main()

, };

testarr(a, 2);

}

#include #include #define n   4

void testarr(int (*a)[n], int m)

}int main()

, };

testarr(a, 2);

}

int (*a)[n] 表示指向一維陣列的指標變數,即a所指向的物件是含有4個整型元素的陣列。注意 () 不能少,若定義成:

int *a[n] 則表示有乙個一維陣列a[n],該陣列中的所有元素都是 (int *)型別的元素。

在這裡,在子函式中訪問二維陣列中的元素可以用 a[i][j] 或者 *(*(a+i)+j)

2. 將二維陣列的兩個維度用變數的形式傳遞過去

如下所示:

#include

#include

#define n   4

void testarray(int **a, int m, int n)

}int main()

, };

testarray((int **)a, 2, n);

}

#include #include #define n   4

void testarray(int **a, int m, int n)

}int main()

, };

testarray((int **)a, 2, n);

}

此時在子函式中不能使用a[i][j]的形式訪問陣列元素,因為陣列元素都是順序儲存,位址連續,在使用a[i][j]訪問陣列元素時,無法順序訪問到指定的元素,所有我們只能通過計算指定所要訪問的元素。 





動態建立二維vector陣列

二維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語...

C 用vector 動態建立二維陣列

建立 vectorw 10,1 w width 即列數 vector vector arr 9,w 9行10列 二維陣列注意 用一維陣列給二維陣列賦值時,兩個 要隔開 賦值 可直接賦值 arr i j 1 新增元素 在最後一行下面新增一行 arr.push back vector 10,1 在某一行...

動態建立二維陣列

c 中用new動態建立二維陣列的格式一般是這樣 type p n new type n 其中,type是某種型別,n是二維陣列的列數。採用這種格式,列數必須指出,而行數無需指定。在這裡,p的型別是type n 即是指向乙個有n列元素陣列的指標。還有一種方法,可以不指定陣列的列數 int p p ne...