Tôi muốn tránh các bản sao không cần thiết. Tôi đang nhắm đến một cái gì đó dọc theo dòng:Cách hiệu quả để đọc tệp thành một tiêu chuẩn :: vector <char>?
std::ifstream testFile("testfile", "rb");
std::vector<char> fileContents;
int fileSize = getFileSize(testFile);
fileContents.reserve(fileSize);
testFile.read(&fileContents[0], fileSize);
(mà không làm việc vì reserve
không thực sự chèn bất cứ điều gì vào vector, vì vậy tôi không thể truy cập [0]
).
Tất nhiên, std::vector<char> fileContents(fileSize)
hoạt động, nhưng có chi phí khởi tạo tất cả các phần tử (fileSize
có thể khá lớn). Tương tự cho resize()
.
Câu hỏi này không quá quan trọng về mức độ quan trọng của chi phí. Thay vào đó, tôi chỉ tò mò muốn biết nếu có một cách khác.
Nếu bạn muốn tránh chi phí phân bổ lại được yêu cầu bởi 'push_back' _and_ bạn muốn tránh chi phí lấy zeroing bộ đệm cần thiết bằng cách sử dụng' resize', không sử dụng 'std :: vector': sử dụng 'boost :: scoped_array' hoặc một cái gì đó tương tự. –