如何将二维数组传递给函数并像 myArray[i][j] 一样使用它,但不知道该函数内该数组的大小?
我可以知道主里面的大小。
我想像这样使用它:
TGraph *myGraph = new TGraph(nValues, myArray[0][j], myArray[1][j]);
// I'll not use a loop for j, since TGraph receives all the values in the array,
like "x values" and "y values"
如果我这样做它可以工作,但我必须传递给函数 Col1 和 Col2 ,它们是两个一维数组:
main() {
...
graphWaveTransmittance("a", nValues, Col1, Col2,
" Au ", "Evaporated", "thickness 5nm", kGreen+1);
...
}
void graphWaveTransmittance(char *n, int nValues, float Param1[], float Param2[],
char *title, char *header, char *entry, Color_t color) {
TGraph *myGraph = new TGraph(nValues, Param1, Param2);
...
}
数组:
float valuesArray[nCol][nValues];
for(int y=0; y<nValues; y++){
for (int i=0; i<nCol; i++) {
valuesArray[i][y] = values[i][y];
}
i=0;
}
注意:我之所以这样做是因为 values[ ][ ] 是一个数组,其中的值是从文本文件中读取的。在阅读文件之前,我不知道需要多少行。使用第二个数组 (valuesArray[ ][ ]),我可以使它的大小与读取的值的数量相同。
首先,我用“-1”将所有值放在 values[ ][ ] 中,它的大小非常大。然后我计算了行数,并将该值用于 valuesArray[][]。这是第一个有值的数组(大的):
const int nCol = countCols;
float values[nCol][nLin];
// reads file to end of *file*, not line
while(!inFile.eof()) {
for(int y=0; y<nLin; y++){
for (int i=0; i<nCol; i++) {
inFile >> values[i][y];
}
i=0;
}
}
另一个问题,我看到不应该使用“while(!inFile.eof())”。我可以用什么代替?(此时我不知道 .txt 文件的总行数)
在 .txt 的列中导入值,到目前为止我有:
vector<vector<float> > vecValues; // your entire data-set of values
vector<float> line(nCol, -1.0); // create one line of nCol size and fill with -1
bool done = false;
while (!done)
{
for (int i = 0; !done && i < nCol; i++)
{
done = !(inFile2 >> line[i]);
}
vecValues.push_back(line);
}
问题是这些值就像 vecValues[value][column number from .txt] 我想要 vecValues[column number from .txt][value]。
我怎样才能改变它?
我正在从这样的文件中读取:
main() {
...
vector < vector <float> > vecValues; // 2d array as a vector of vectors
vector <float> rowVector(nCol); // vector to add into 'array' (represents a row)
int row = 0; // Row counter
// Dynamically store data into array
while (!inFile2.eof()) { // ... and while there are no errors,
vecValues.push_back(rowVector); // add a new row,
for (int col=0; col<nCol; col++) {
inFile2 >> vecValues[row][col]; // fill the row with col elements
}
row++; // Keep track of actual row
}
graphWaveTransmittance("a", nValues, vecValues, " Au ",
"Evaporated", "thickness 5nm", kGreen+1);
// nValues is the number of lines of .txt file
...
}
//****** Function *******//
void graphWaveTransmittance(char *n, int nValues,
const vector<vector <float> > & Param, char *title, char *header,
char *entry, Color_t color) {
// like this the graph is not good
TGraph *gr_WTransm = new TGraph(nValues, &Param[0][0], &Param[1][0]);
// or like this
TGraph *gr_WTransm = new TGraph(Param[0].size(), &Param[0][0], &Param[1][0]);
注意:TGraph 可以接受浮点数,我之前的数组是浮点数
你知道为什么图表没有正确显示吗?
谢谢