Depends on the why you want to use them. If you want to push much new items to the array its difficult. If you push a new item to the array you need to reallocate it and find a new bigger place for it in the memory.
If you don't want to push many items during runtime then maybe you can use an array.
If you want to push many items constantly then you might want to use a linked list.
Vectors are useful when you don't know the exact amount of items you need.
The "core" of a vector is the push function: it adds an element at the end and increases the vector's size by 1. The inner workings are something like this:
The vector has an array of size 'N' and a variable that keeps its actual size 'n'. When push is called, it checks whether n <= N. If yes, add item to the n'th spot and increase n by one. If not, make a new array of size N*2, copy all N elements to the new array, double N, delete the old array.
Obviously, push is very efficient if n < N. All it does is write a new object to an array slot, and increase a counter by one. However, push is very expensive if n = N, because it needs to allocate new memory and copy N items. Since N doubles every time n = N, the likeliness of this appearing decreases when size increases, which means the "amortized complexity" (average of "infinite" push calls) is constant.
Having all these pointers only makes you code less readable and has a greater chance to make mistakes. In my opinion it's better to use std::vector, and never use pointers for this purpose. You can use arrays if you know the size at compile time though.
For multidimensional arrays I usually use a simple std::vector and index it something like [y * width + x], or puts it inside a wrapper class.
You can use arrays if you know the size at compile time though.
Or a somewhat tight upperbound for the size. Personally, I prefer a bit of memory redundancy over switching to vectors for static content. Vectors are great, but if you don't need them, don't use them.
Then again, my work is hardly ever memory-critical. In the real world, memory redunancy is probably not a good idea.