Здравствуйте, Vano, Вы писали:
Может это будет интересно:
as_binary
Так напиши свой собственный итератор:
template<typename T>
class binary_ostream_iterator
{
public:
binary_ostream_iterator(std::ostream& ref) : stream(&ref)
{
}
binary_ostream_iterator& operator=(const T &value)
{
stream->write((const char *)&value, sizeof(T));
return stream;
}
binary_ostream_iterator& operator*()
{
return (*this);
}
binary_ostream_iterator& operator++()
{
return (*this);
}
binary_ostream_iterator operator++(int)
{
return (*this);
}
private:
std::ostream* stream;
};
Здравствуйте, Vano, Вы писали:
V>Здравствуйте, мастера!
V>Подскажите, пожалуйста, как можно организовать бинарный вывод в файл массива целых (или с плавающей запятой) чисел?
V>Мыслится что-то вроде
V>vector<long> arr;
V>...
V>ofstream ofile(FileName,ios::app|ios::binary);
V>copy(arr.begin(), arr.end(), ostream_iterator<long> (ofile)); //или ostreambuf_iterator...
V>Но ostream_iterator выводит всегда в текстовом виде, а ostreambuf_iterator не компилируется.
Попробуй так:
copy(
reinterpret_cast<const char*>(&arr.front()),
reinterpret_cast<const char*>(&arr.back() + 1),
ostreambuf_iterator<char>(ofile)
);
Здравствуйте, Анатолий Широков, Вы писали:
АШ>Так напиши свой собственный итератор:
Интересно, какие альтернативы написанию своего собственного итератора появились по прошествии четырех с половиной лет?
Пока-что нашел только
binary_iostreams.
Вроде это совсем не редко возникающая потребность записать содержимое некого контейнера в файл в двоичном формате. Предполагаю, что большинство никаких итераторов не пишет, а использует цикл for вместо рекомендуемого std::copy. Или нет?