My question is simple: are std::vector elements guaranteed to be contiguous? In order word, can I use the pointer to the first element of a std::vector as a C-array?
Yes, the elements of a std::vector are guaranteed to be contiguous.