I have a question regarding arrays. Do you have to define their size during development, or can you dynamically allocate them?
I've came across vectors and it seems to do what I want, however I don't know if there intention is to be dynamic arrays or if there is another purpose for them?
Dynamic arrays should be avoided. The keyword new and delete should be avoided, if you ever need to allocate memory use smart pointers (you can google that). Use vectors.
You use dynamic arrays when you manually want to manage your memory. C++ has a lot of built-in features to make this a lot safer. You can forget to free your memory, causing a memory leak, or free it twice, causing a double-free (and probably a crash). C++ abstracts most of this away from you, so you don't have to bother using it yourself.
There are of course cases where you do need to use dynamic memory, think about creating large fixed-size buffers (for example to hold textures for a game). Usually you wrap the obtained pointer to the dynamic memory in a smart pointer then, a smart pointer will automatically free the memory when it is no longer required (when all of its pointers go out of scope).
Of course, when you want to pass the memory to C or assembly, you will need to use a raw pointer (which can also be obtained from a smart pointer, in case C doesn't use the pointer after the smart pointer frees it), but in this scenario, it is also possible to just pass a pointer to the first element of a vector (as long as the C code treats it as a fixed-size array).