![](/img/trans.png)
[英]How can I get the number of rows and columns of a 2-D dynamic array in c++
[英]Initialization of 2D array with dynamic number of rows and fixed number of columns. C++
我在使用C ++創建2D動態數組時遇到問題。 我希望它具有“行”的動態數字(例如numR)和固定的(例如2)數量的“列”。
我嘗試這樣做:
const numC = 2;
int numR;
numR = 10;
double *myArray[numC];
myArray = new double[numR];
不幸的是,它不起作用。 是否有可能以這種方式做到這一點?
當然我可以使用double **myArray
並初始化它,好像兩個維度都是動態的(在循環中使用numC作為限制器)但我想盡可能避免它。
提前致謝。
是否有可能以這種方式做到這一點?
是:
double (*myArray)[numC] = new double[numR][numC];
// ...
delete[] myArray;
這看起來有點不尋常,但5.3.4§5明確指出:
new int[i][10]
是int (*)[10]
請注意,許多程序員不熟悉C聲明符語法,並且不會理解此代碼。 此外,手動動態分配也不例外。 對於這些方法,數組向量更好:
#include <vector>
#include <array>
std::vector<std::array<double, numC> > vec(numR);
// ...
// no manual cleanup necessary
用std::tr1::array
或boost::array
替換std::array
,具體取決於你的編譯器。
為什么不使用std :: vector ,並利用它的構造函數 :
std::vector<std::vector<int> > my2Darray(2, std::vector<int>(10));
my2Darray[0][0] = 2;
需要循環,因為您需要為每列創建一個數組。
我想你所追求的是:
double *myArray[numC];
for (int i = 0; i < numC; i++) {
myArray[i] = new double[numR];
}
// some code...
// Cleanup:
for (int i = 0; i < numC; i++) {
delete [] myArray[i];
}
這聲明指針數組(以double
)與numC
元素,然后創建的陣列double
s的numR
為每列中的元素myArray
。 完成后不要忘記釋放內存,否則會導致內存泄漏。
您的索引應該是行,然后是列。
double** myArray = new double*[numR];
for( unsigned int i = 0; i < numR; i++ ) {
myArray[i] = new double[numC];
}
訪問第2行第5列:
myArray[2][5];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.