0
나는 거대한 벡터가 boost dynamic_bitset입니다. 나는 dynamic_bitset 벡터를 파일에 쓰고 나중에 파일을 다시 dynamic_bitset 벡터로 읽어 들이기를 원합니다. dynamic_bitset에 대한 메모리가 연속 메모리 블록으로 할당되어 있습니까? (전체 벡터를 순회하지 않고 한 번에 쓸 수 있도록)거대한 부스트 dynamic_bitset 벡터를 파일에 쓰고 다시 읽어들이는 효율적인 방법
비트 세트 벡터의 크기는 수백만입니다. 그래서 요소를 반복하는 대신 파일에 파일을 작성하는 효율적인 방법을 찾고 있습니다.
dynamic_bitset을 문자열로 변환 한 다음 문자열을 파일에 기록했습니다. 나중에 파일에서 문자열을 읽고이를 다시 dynamic_bitset으로 변환합니다. 문자열로 저장
#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;
}
그러나 심지어이 방법 파일에 기록하는 데 시간이 오래 걸립니다 : 아래
내가 비주얼 스튜디오를 사용하여 C++로 작성한 코드입니다. 파일에서 문자열로 다시 읽으려고하면 "처리되지 않은 액세스 위반 예외"가 발생합니다. 같은 것을 구현하는보다 효율적인 방법이 있습니까?