Me gustaría evitar copias innecesarias. Estoy apuntando a algo en la línea de:Manera eficiente de leer un archivo en un estándar :: vector <char>?
std::ifstream testFile("testfile", "rb");
std::vector<char> fileContents;
int fileSize = getFileSize(testFile);
fileContents.reserve(fileSize);
testFile.read(&fileContents[0], fileSize);
(que no funciona porque reserve
en realidad no introduzca nada en el vector, por lo que no se puede acceder [0]
).
Por supuesto, std::vector<char> fileContents(fileSize)
funciona, pero hay una sobrecarga de inicialización de todos los elementos (fileSize
puede ser bastante grande). Lo mismo para resize()
.
Esta pregunta no se trata tanto de cuán importante sería esa sobrecarga. Por el contrario, solo tengo curiosidad por saber si hay otra manera.
Si desea evitar el costo de reasignación requerido por 'push_back' _and_ desea evitar el costo de poner a cero el búfer requerido al usar' resize', no use un 'std :: vector' en absoluto: use un 'boost :: scoped_array' o algo similar. –