我正在尝试使用这种迭代器,但以下代码出现错误:
void linearMatrix::Write_File_Matrix(const char *Path)
{
ofstream FILE(Path, std::ios::out | std::ofstream::binary);
FILE.write(reinterpret_cast<const char *>(&myWidth), sizeof(float));
FILE.write(reinterpret_cast<const char *>(&myHeight), sizeof(float));
ostreambuf_iterator<float> out_it (FILE);
copy(myVector.begin(), myVector.end(), out_it);
}
void linearMatrix::Read_File_Matrix(const char *Path)
{
ifstream FILE(Path, std::ios::in | std::ifstream::binary);
if(!FILE)
{
cerr << "Cannot open the file" << endl;
exit(1);
}
FILE.read(reinterpret_cast<const char *>(&myWidth), sizeof(myWidth));
FILE.read(reinterpret_cast<const char *>(&myHeight), sizeof(myHeight));
istreambuf_iterator<float> iter(FILE);
copy(iter.begin(), iter.end(), std::back_inserter(myVector));
}
问题是:
1-ostreambuf_iterator<float> out_it (FILE);
错误:从 'void*' 到 'std::ostreambuf_iterator::streambuf_type* {aka std::basic_streambuf >*}' [-fpermissive] 的无效转换
2-FILE.read(reinterpret_cast<const char *>(&myWidth), sizeof(myWidth));
错误:从 'const char*' 到 'std::basic_istream::char_type* {aka char*}' 的无效转换 [-fpermissive]
3-FILE.read(reinterpret_cast<const char *>(&myHeight), sizeof(myHeight));
错误:从 'const char*' 到 'std::basic_istream::char_type* {aka char*}' 的无效转换 [-fpermissive]
4-std::ifstream FILE(Path, std::ios::in | std::ifstream::binary);
错误:从 'void*' 到 'std::ostreambuf_iterator::streambuf_type* {aka std::basic_streambuf >*}' [-fpermissive] 的无效转换
5-复制(iter.begin(),iter.end(),std::back_inserter(myVector));
错误:“class std::istreambuf_iterator”没有名为“begin”的成员</p>
错误:“类 std::istreambuf_iterator”没有名为“end”的成员</p>
我究竟做错了什么?我正在使用 CUDA 的 nsight eclipse,但使用 g++ 编译 C++ 项目。我指的是:正确读取和写入 std::vector 到文件中
#include <iostream>
#include <algorithm>
#include <iterator>
#include <fstream>
#include <vector>
using namespace std;
void Write_File_Matrix(const char *Path)
{
float myWidth = 0;
float myHeight = 0;
vector<float> v;
v[0] = 1;
v[1] = 2;
v[2] = 3;
ofstream outFILE(Path, ios::out | ofstream::binary);
outFILE.write(reinterpret_cast<const char *>(&myWidth), sizeof(float));
outFILE.write(reinterpret_cast<const char *>(&myHeight), sizeof(float));
ostreambuf_iterator<float> out_it (outFILE);
copy(V.begin(), V.end(), out_it);
}
void Read_File_Matrix(const char *Path)
{
float myWidth = 0;
float myHeight = 0;
vector<float> v;
ifstream inFILE(Path, ios::in | ifstream::binary);
if(!inFILE)
{
cerr << "Cannot open the file" << endl;
exit(1);
}
inFILE.read(reinterpret_cast<const char *>(&myWidth), sizeof(myWidth));
inFILE.read(reinterpret_cast<const char *>(&myHeight), sizeof(myHeight));
istreambuf_iterator<float> iter(inFILE);
copy(iter.begin(), iter.end(), std::back_inserter(myVector));
}
int main() {
Write_File_Matrix("M.dat");
Read_File_Matrix("R.dat");
return 0;
}