// 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...