【发布时间】:2017-08-28 01:20:44
【问题描述】:
我在加载/阅读时遇到问题
vector<vector< bitset<32> >
(在我的代码中称为/typedef'ed as population)
它使用以下代码存储:
void genetic_algorithm::save_generation(population pop_to_save, string filename){
std::ofstream file(filename, std::ofstream::binary);
unsigned long n;
for(size_t i = 0; i < pop_to_save.size(); i++ )
{
if ( pop_to_save[i].size() > 0 )
{
n = pop_to_save[i][0].to_ulong();
const char* buffer = reinterpret_cast<const char*>(&n);
file.write(buffer, pop_to_save[i].size());
}
}
}
因此我需要的是一个可以加载的函数,即:
population genetic_algorithm::load_generation(string filename){
// TODO
}
最好的问候,
马蒂亚斯。
编辑
我自己解决了这个问题(在评论的帮助下) 以下是任何可能面临相同问题的最终代码:
void genetic_algorithm::save_generation(population pop_to_save, string filename){
std::ofstream file(filename, std::ofstream::binary);
unsigned long n;
for(size_t i = 0; i < pop_to_save.size(); i++ ) {
for (size_t j = 0; j < pop_to_save[i].size(); j++) {
n = pop_to_save[i][j].to_ulong();
file.write(reinterpret_cast<const char*>(&n), sizeof(n));
}
}
std::cout << "Saved population to: " << filename << '\n';
}
population genetic_algorithm::load_generation(string filename){
std::ifstream file(filename, std::ofstream::binary);
population loaded_pop (20, std::vector<bitset<32>> (394,0));
unsigned long n;
for(size_t i = 0; i < 20; i++ ) {
for (size_t j = 0; j < 394; j++) {
file.read( reinterpret_cast<char*>(&n), sizeof(n) );
loaded_pop[i][j] = n;
}
}
std::cout << "Loaded population from: " << filename << '\n';
return loaded_pop;
}
【问题讨论】:
标签: c++ vector save ifstream bitset