gpt4 book ai didi

c++ - 将巨大的 boost dynamic_bitset vector 写入文件并将其读回的有效方法

转载 作者:行者123 更新时间:2023-11-28 08:01:25 26 4
gpt4 key购买 nike

我有一个巨大的 vector boost dynamic_bitset .我想将 dynamic_bitset vector 写入一个文件,然后将该文件读回到 dynamic_bitset vector 中。 dynamic_bitset 的内存是否分配为连续的内存块(这样我就可以一次写入整个 vector 而无需遍历)?

bitset vector 的大小为数百万。所以我正在寻找一种有效的方法将它们写入文件而不是遍历元素。

我将 dynamic_bitset 转换为字符串,然后将字符串写入文件。稍后从文件中读取字符串并将其转换回 dynamic_bitset。

下面是我使用 Visual Studio 用 C++ 编写的代码:

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <boost/dynamic_bitset.hpp>
using namespace std;

int main(int argc, char* argv[])
{
// Initializing a bitset vector to 0s
boost::dynamic_bitset<> bit_vector(10);
bit_vector[0] = 1; bit_vector[1] = 1; bit_vector[4] = 1; bit_vector[7] = 1; bit_vector[9] = 1;
cout<<"Input :"<<bit_vector<<endl; //Prints in reverse order

//Converting dynamic_bitset to a string
string buffer;
to_string(bit_vector, buffer);

//Writing the string to a file
ofstream out("file", ios::out | ios::binary);
char *c_buffer = (char*)buffer.c_str();
out.write(c_buffer, strlen(c_buffer));
out.close();

//Find length of the string and reading from the file
int len = strlen(c_buffer);
char* c_bit_vector = new char(len+1);
ifstream in;
in.open("file", ios::binary);
in.read(c_bit_vector, len);
c_bit_vector[len] = 0;
in.close();

//Converting string back to dynamic_bitset
string str2 = c_bit_vector;
boost::dynamic_bitset<> output_bit_vector( str2 );
cout<<"Output:"<<output_bit_vector<<endl;

system("PAUSE");
return 0;
}

但即使是这种方法,将其存储为字符串,也需要很长时间才能写入文件。当我尝试从文件读回字符串时,我得到一个“未处理的访问冲突异常”。有没有更有效的方法来实现相同的?

最佳答案

嗯... mb 使用运算符 << 和运算符 >>?

template <typename Ch, typename Tr, typename Block, typename Alloc>
std::basic_ostream<Ch, Tr>&
operator<<(std::basic_ostream<Ch, Tr>& os,
const dynamic_bitset<Block, Alloc>& b)

template <typename Ch, typename Tr, typename Block, typename Alloc>
std::basic_istream<Ch, Tr>&
operator>>(std::basic_istream<Ch, Tr>& is, dynamic_bitset<Block, Alloc>& b)

关于c++ - 将巨大的 boost dynamic_bitset vector 写入文件并将其读回的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11359223/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com