多维向量C ++

时间:2017-10-24 01:22:17

标签: c++ matrix vector fstream iostream

我试图创建一个像这样的矩阵

1 2 3

4 5 6

将是一个2x3矩阵。我试图使用以下代码

从文本文件中动态填充矩阵
int main()
{
char c;
//Determine OS
#ifdef __unix
    cout << "linux machine \n";
    char dirinp[50] = "~/temp/coursein/p3-in.txt";
    char dirout[50] = "~/temp/fileio/p3-out.txt";
#endif
#ifdef _WIN32
    cout << "windows machine \n";
    char dirinp[50] = "C:\\temp\\coursein\\p3-in.txt";
    char dirout[50] = "C:\\temp\\coursein\\p3-out.txt";
#endif
//Open file
ifstream infile, outfile;
infile.open(dirinp);
if (!infile) 
{
    cout << "Couldn't open file";
}
infile.get(c);
int col = 0, row = 0;
while(!infile.eof())
{
    if (c == '\n')
    {
        col = col + 1;
        cout << "\ncol: " << col << endl;
    }
    //cout << c;
    if (isdigit(c)) 
    {
        //cout << "its a digit";
        int num = c - '0';
        matrix[col].push_back(num);
        cout << num << " added to matrix ";
    }
    infile.get(c);
}

我的主要想法是你通过字符搜索文件字符来搜索换行符。如果字符是数字(isdigit(c)== true),则将该元素推送到矩阵的该行。如果到达换行符,请转到矩阵的下一个垂直行,然后从左到右开始填充向量。

1 个答案:

答案 0 :(得分:0)

如果矩阵是

std::vector<std::vector<int>> matrix;
那么你所拥有的几乎可以工作。将col = col + 1替换为

col = col + 1;
matrix.push_back(std::vector<int>());

如果你想要一个int **,那么你可以在退出while循环后循环matrix

int **mat = new int[matrix.size()][matrix[0].size()];
for (int i = 0; i < matrix.size(); i++) {
    for (int j = 0; j < matrix[i].size(); j++) {
        mat[i][j] = matrix[i][j];
    }
}