The size of std::array is fixed at compilation time, and no extra memory is used besides the storage of the array elements.
The size of std::vector can change dynamically as the program executes, and you pay for this flexibility with a size overhead of 3 pointers versus std::array. Access time is identical.
So for example if you want to store 3 space coordinates (x, y, z), and you want indexed access, std::array is a better choice. If you want to store a bunch of these triplets, and you don't know how many you'll have to store, put them in a std::vector.
So for example you could write:
typedef std::array<float, 3> Position;
typedef std::vector<Position> Positions;