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