I believe the C style array is slightly faster than vectors, but not enough to outweigh the benefits of vectors. Can't say about std::array (C++11) because I haven't even touched those yet.
Vectors work the same as arrays, but they can resize when they need to, and you don't need to specify a size when you make one. They are also a class type, which means they get access a bunch of a different methods to help when working with them. Pretty much, they are really robust arrays that handle size reallocation on their own. Oh and you get access to std::iterator which makes traversing pretty simple and faster than the bracket [] access, which you can use in vectors if you want.
Arrays are nice because they have no overhead. You don't need to include anything to use them (except of course for std::array).
Can't really think of any cons for vectors, other than you'll see a slight slowdown whenever it needs to resize, especially if it needs to move to a different spot in memory. But that can be mitigated.
Cons for arrays, they are really basic. They remained unchanged from C to C++, so they are about as close to the hardware as you can get. That being said, you're on own when working with them. No bounds checking, if you run out of room, you have to make more yourself which can be error prone.
If you're using C++, use vectors in place of arrays. The benefits far outweigh any con it might have.
http://www.cplusplus.com/reference/stl/vector/
EDIT:
Something to keep in mind when using std::iterator with std::vector, if your vector resizes, your iterator could become invalidated if the vector actually moves to a different location in memory.