如何使用 C++ 中的函数将向量写入文件?

Posted

技术标签:

【中文标题】如何使用 C++ 中的函数将向量写入文件?【英文标题】:How to write a vector to a file with a function in C++? 【发布时间】:2015-12-07 00:07:27 【问题描述】:

这是我的代码的一些 sn-ps。首先是我编写的函数。给我一个错误的是 fileout 函数,它应该将向量写入文件。

vector<int> random(int rowsize, int columnsize) // generates a random matrix given number of rows and columns, stores it as a 1-dimensional vector

    int elements = rowsize*columnsize;
    vector<int> x(elements);
    int matrix[10][10];

    int n=0;
    for(int i = 0; i < rowsize; i++)
            
                for(int j = 0; j < columnsize; j++)
                
                    matrix[i][j]= -10 + rand() % 21;
                    x[n++] = matrix[i][j];
                
            

    return x;


void print(vector<int> matrix, int columnsize) //prints the matrix given the number of columns

    for(int i=0; i < matrix.size(); i++)
    
        if(i%columnsize != 0)
            cout << setw(10) << matrix[i];
        if(i%columnsize == 0)
            cout << endl << setw(10) << matrix[i];
    
    cout << endl;


vector<int> addmat(vector<int> matrixA, vector <int> matrixB) //adds two matrices together, takes vector input

    vector<int> matrix(matrixA.size());
    for(int i=0; i< matrixA.size(); i++)
        matrix[i] = (matrixA[i] + matrixB[i]);

    return matrix;


vector<int> filefill(ifstream &fin, string file, int rowsize, int columnsize) //creates a matrix from a file

    fin.open(file.c_str());
    vector<int> matrix;
    int number;

    for(int i=0; i < rowsize*columnsize; i++)
    
        while(fin >> number)
            matrix.push_back(number);
    

    fin.close();
    return matrix;


void fileout(ofstream fout, string file, vector<int> matrix) //writes a matrix onto a file

    fout.open(file.c_str());
    for(int i=0; i < matrix.size(); i++)
        fout << matrix[i];
    fout.close();

这是main中函数的使用。 fileout函数里面的fout被标记为错误:

“6 IntelliSense:“std::basic_ofstream<_elem _traits>::basic_ofstream(const std::basic_ofstream<_elem _traits>::_Myt &_Right) [with _Elem=char, _Traits=std::char_traits]” (在“C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\fstream”的第 1034 行声明)不可访问 c:\Users\William\Desktop\C++\Homework8\HW8\hw8.cpp 163 11 HW8

else if (answer == "N" || answer == "n")
    

        matrixA = random (Arow, Acolumn);
        cout << "Matrix A" << endl;
        print(matrixA, Acolumn);

        matrixB = random (Brow, Bcolumn);
        cout << "Matrix B" << endl;
        print(matrixB, Bcolumn);

        cout << endl << "Matrix A + Matrix B =" << endl;

        vector<int> matrixC = addmat (matrixA, matrixB);
        print(matrixC, Acolumn);

        for (int i = 0; i < matrixA.size(); i++)
        
            matrixB.push_back(matrixA[i]);
        

        string filo;
        cin >> filo;
        ofstream fout;
        fileout(fout, filo, matrixB);


    

不知道是什么问题????????????

【问题讨论】:

比较 filefill 的签名,你通过引用获取流和 fileout,你通过值获取流。流不是要被复制的值类型(通过值将它们传递给函数意味着值的副本),它们是通过引用传递的。 【参考方案1】:

不要从调用fileout 函数的人那里接受ofstream 对象,而是尝试在fileout 内部创建一个本地ofstream fout

void fileout(string file, vector<int> matrix) //writes a matrix onto a file

    ofstream fout;
    fout.open(file.c_str());
    for(int i=0; i < matrix.size(); i++)
        fout << matrix[i];
    fout.close();

【讨论】:

以上是关于如何使用 C++ 中的函数将向量写入文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C++ 以二进制模式将向量写入文件?

如何有效地将结构向量写入文件?

C++ YAML:如何编辑/写入 .yaml 文件中的节点

C++ 如何将一个文件里的数据写入到另一个文件里?

将标量的多维向量(张量)写入 C++ 文件

如何使用 C++ API 在 HDF5 文件中写入/读取锯齿状数组?