У меня есть двоичный файл, который содержит удвоения размером 8 байт. Я хочу прочитать двойник в vector<double>
см нижечитать двоичный файл в адрес элемента вектора
ifstream infile("x.dat", ios::binary);
vector<double>data(filesize/8, 0.0);
for(int i=0; i< (filesize/8); ++i)
{
infile.read((char *) (&data[i]), sizeof(double));
}
Я знаю, что это будет работать, если данные был C
массива, но не уверен, если это будет работать для vector
, поскольку vector
содержит больше материала, чем C
массива (vector
имеет методы), имеет ли адрес &data[i]
адрес элемента данных i-го элемента?
Да - код в порядке (кроме проверки 'infile' для ошибок открытия/чтения). Почему бы вам не запустить его, доказать, что он работает, и продолжить работу с остальной частью программы? –
'vector' - это последовательные данные о хранении контейнера, такие как массив' C', с дополнительной информацией, например 'size' и' capacity'. Да, он также был предназначен для использования в качестве примитивных массивов. –
Возможный дубликат [Являются ли std :: vector Elements Guaranteed To Continuous] (http://stackoverflow.com/questions/849168/are-stdvector-elements-guaranteed-to-be-contiguous). –