簡體   English   中英

具有動態行數和固定列數的2D數組的初始化。 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::arrayboost::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM