如何使用 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++ 中的函数将向量写入文件?的主要内容,如果未能解决你的问题,请参考以下文章