당신은 copy_n의 조합과 insert_iterator
void test_1816319()
{
static char const* fname = "test_1816319.bin";
std::ofstream ofs(fname, std::ios::binary);
ofs.write("\x2\x0", 2);
ofs.write("ab", 2);
ofs.close();
std::ifstream ifs(fname, std::ios::binary);
std::string s;
size_t n = 0;
ifs.read((char*)&n, 2);
std::istream_iterator<char> isi(ifs), isiend;
std::copy_n(isi, n, std::insert_iterator<std::string>(s, s.begin()));
ifs.close();
_unlink(fname);
std::cout << s << std::endl;
}
없이 복사, 아니 해킹, 오버런, 아니 정의되지 않은 동작없이 가능성을 사용할 수 있습니다.
당신이'벡터'대신'string'을 사용하는 방법에 대한 생각 했습니까? 데이터가 "문자열 형"보다 "원시"인 경우 더 잘 작동 할 수 있으며 직접 액세스보다 혼동이 적습니다. (벡터는 연속적으로 저장해야하므로'& v [0]'을 사용하십시오.) –
대부분의 경우 문자열 데이터이며 큰 바이너리 파일에 포함됩니다.또한 나는 단지 로딩 루틴을 바꾸기를 원합니다. 1000 라인의 코드 라인은 한번로드 된 데이터를 사용하는 것이 아니라 std :: string의 변경이 필요합니다. –
그런 다음 특정 문자열 구현을 확인한 다음 GMan의 대답을 사용하여 'is.read'다음에 스트림을 확인하십시오. –