Skip to content

Reading and Writing `std::vector` with HDF5 – The H5CPP Way

The Question (Paul Tanja, Jul 1, 2020)

Hi, I was wondering if it's possible to read/write std::vector to HDF5—especially if the size of the array isn’t known at runtime?

This is a common need: we often work with dynamically sized containers and want clean, type-safe persistence. In raw HDF5 C++ API, that’s boilerplate-y; but H5CPP abstracts that.

My Take – H5CPP Makes It Trivial

Absolutely—you can use std::vector<T> directly. I built that feature years ago, and since then have added:

  • Modern template metaprogramming for Python-like syntax
  • Container detection via compile-time features
  • Generative heuristics for layout selection (contiguous, chunked, etc.)

Basically, all the complexity is hidden—H5CPP handles it. Two quick calls are your friends:

```cpp h5::write(file, dataset_name, std_vector); // one-shot write h5::append(file, dataset_name, std_vector); // fast chunked appends ````

The h5::append call writes using direct chunk-block IO, and hits the same throughput as the underlying filesystem—even fast single-event streams (like HFT tick bids).

So you don’t have to reinvent this wheel—unless your goal is educational exploration. In that case: consider writing your own chunked pipeline using BLAS-3 style blocking for performance… but it’s hard, and I built this already 😉

Quick Summary

Task H5CPP API
One-shot write of std::vector h5::write(...)
Efficient append to dataset h5::append(...)
Flexible container support Automatic via templates
Best-in-class performance Zero-overhead chunk writing

Let me know if you'd like a full example comparing H5CPP vs raw HDF5 C++ code, or how to integrate these calls into a circular buffer workflow.

Steven Varga