특정 시나리오에서는 파일을 std::Vector
std::ifstream testFile("testfile", "rb"); std::vector<char> fileContents; int fileSize = getFileSize(testFile); fileContents.reserve(fileSize); testFile.read(&fileContents[0], fileSize);
그러나 Reserve()를 사용하여 벡터 크기를 조정할 때 이 접근 방식은 실패합니다. 실제로 벡터에 요소를 삽입하지 않기 때문입니다. 결과적으로 fileContents[0]에 액세스하려고 하면 오류가 발생합니다.
더 포괄적인 솔루션에는 반복기를 사용하는 것이 포함됩니다. 입력 파일 스트림을 사용하면 다음 스니펫을 통해 효율적인 파일 읽기가 가능합니다.
#include<iterator> //... std::ifstream testFile("testfile", std::ios::binary); std::vector<char> fileContents((std::istreambuf_iterator<char>(testFile)), std::istreambuf_iterator<char>());
이 접근 방식은 istreambuf_iterator를 활용하여 입력 파일 스트림을 반복하고 요소를 벡터에 직접 삽입합니다.
재할당이 중요하다면 Reserve()를 사용하여 벡터:
#include<iterator> //... std::ifstream testFile("testfile", std::ios::binary); std::vector<char> fileContents; fileContents.reserve(fileSize); fileContents.assign(std::istreambuf_iterator<char>(testFile), std::istreambuf_iterator<char>());
이 변형에서 Reserve()는 알려진 파일 크기를 기반으로 공간을 할당하는 데 사용되며 할당()은 반복자를 사용하여 벡터를 채우는 데 사용됩니다.
위 내용은 파일을 std::벡터로 효율적으로 읽는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!