如何从二进制文件中读取数据并返回到矢量



由于我英语不好,我提前为没有解释而道歉。我创建了一个二进制文件来存储这些对象。我想读一下,然后推回到向量上,但我不知道该怎么办。

class Player
{
string name;
int score;
int id;
size_t num; 
char* p;
};

这些函数是在写入二进制文件时使用的。

void write(ostream& os) 
{
os.write((char*)this, sizeof(Player));
os.write((char*)p, num);
}

这是类的运算符重载函数。下面是主函数,它是以这种方式编写的,用于读取文件,但工作效果并不差。

istream& operator>> (istream& is, Player& p)
{
getline(is, p.name, '');
is.read((char*)&p.score, sizeof(int));
is.read((char*)&p.id, sizeof(int));
is.read((char*)&p.num, sizeof(size_t));
return is;
}
int main()
{
ifstream in{ "Myfile", ios::binary };
vector<Player> players(istream_iterator<Player>(in), {});
}

我该怎么读这个文件?我想读取每个对象的数据,但我认为读取的数据比我想要的要多。

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
class Player
{
string name;
int score;
int id;
size_t num;
char* p;
public:
Player(): name{NULL}, score{0}, id{0}, num{0}, p{nullptr}
{}
Player(string name, int score, int id, size_t num) :
name{ name }, score{ score }, id{ id }, num{ num }, p{ new char[num] }
{}

~Player() 
{ 
delete[] p; 
}
/*Player(const Player& other) : name{ other.name }, score{ other.score }, id{ other.id }, num{ other.num }, p{ new char[num] }
{
memcpy(p, other.p, num);
}*/
void write(ostream& os) {
os.write((char*)this, sizeof(Player));
os.write((char*)p, num);
}
friend istream& operator>> (istream& is, Player& p);
};
istream& operator>> (istream& is, Player& p)
{
getline(is, p.name, '');
is.read((char*)&p.score, sizeof(int));
is.read((char*)&p.id, sizeof(int));
is.read((char*)&p.num, sizeof(size_t));
return is;
}
int main()
{
ifstream in{ "Myfile", ios::binary };
vector<Player> players(istream_iterator<Player>(in), {});
in.close();
}

考虑到您提供的稀缺信息,我相信这可能是您想要的:

std::copy(
std::istream_iterator<int>(in),
std::istream_iterator<int>(),
players.begin()
);

您可以#include <iterator>以使std::istream_iterator可用。

最新更新