[英]How do i read data from binary file and push back to a vector?
我提前為我缺乏解釋道歉,因為我不擅長英語。 我創建了一個存儲這些對象的二進制文件。 我想閱讀它並推回矢量,但我不知道該怎么做。
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);
}
這是 class 的運算符重載 function。 下面是主要的function,就是這樣寫來讀取文件的,但是效果不好。
istream& operator>> (istream& is, Player& p)
{
getline(is, p.name, '\0');
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), {});
}
我應該怎么做才能讀取文件? 我想讀取每個 object 的數據,但我認為正在讀取的數據比我想要的要多。
#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, '\0');
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
可用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.