С++ создает переменное количество массивов

Я прочитал столбцы из файла .txt (в начале файла указано количество столбцов (nCol)) и поместил значения в массив (значения с плавающей запятой [nCol] [nLin]).

Теперь я хочу скопировать значения (например: значения [0] [nLin], значения [1] [nLin]...) в разные массивы с плавающей запятой в зависимости от количества столбцов.

Как я могу создавать массивы с плавающей запятой для каждого столбца, если количество столбцов меняется в зависимости от файла, который я читаю?

//------ Declares Array for values ------//
const int nCol = countCols;
float values[nCol][nLin];

// Fill Array with '-1'
for(int c=0; c<nCol; c++){
    for(int l=0; l<nLin; l++) {
        values[c][l] = -1;
    }
}


//------ Skips the reading of line of values file ------//
getline(inFile, dummyLine);

// 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;    
    }
}

const int nValues = countLines;

float Col1[nValues]=-1,
      Col2[nValues]=-1,
      Col3[nValues]=-1,
      Col4[nValues]=-1,
      Col5[nValues]=-1;

//------ Put values in specific Arrays ------//

for(int v=0; v<nValues; v++) {
        Col1[v] = values[0][v];
        Col2[v] = values[1][v];
        Col3[v] = values[2][v];
        Col4[v] = values[3][v];
        Col5[v] = values[4][v];
}
cout << endl;

Я хочу, чтобы float Col1[] было от 1 до nCol, а последним было float ColnCol[]


person JMG    schedule 07.12.2013    source источник


Ответы (2)


Лучший способ ИМО - использовать std::vector< std::vector<float> >

Вам не нужно создавать разные столбцы 1D, так как вы можете манипулировать этим вектором вектора, как хотите.

person Abhishek Bansal    schedule 07.12.2013
comment
Но возможно ли это с массивами? Я сделал остальную часть программы и расчеты с массивами - person JMG; 07.12.2013
comment
Я не думаю, что ваша программа должна сильно измениться, поскольку векторы работают почти так же, как массивы (конечно, с гораздо большей функциональностью). И чтобы ответить на ваш вопрос, если количество строк динамическое, то нельзя использовать массивы фиксированной длины. - person Abhishek Bansal; 07.12.2013
comment
Извините, что спрашиваю, но можете ли вы привести пример того, как я могу сделать это с векторами? - person JMG; 07.12.2013
comment
Вместо Col1[k] везде используйте values[0][k]. - person Abhishek Bansal; 07.12.2013
comment
Я собираюсь попробовать. Спасибо - person JMG; 07.12.2013

Вместо этого вы должны использовать std::vector. Это лучший выбор для динамического распределения размера типа данных.

person Vaibhav Choudhary    schedule 17.10.2018