The matter is that arrays allocated through "classic" syntax (e.g. int a[5]) are allocated on stack. Therefore, you need to know at compile time how large the array is going to be, as the compiler needs to change the SP (stack pointer) value.
On the other hand, vector's memory area is on the heap, like arrays allocated through malloc/new. Therefore you can wait till run time, to know how much memory you need and allocate it consequently.
Stack/vs heap allocation also has other pros/cons: stack allocation is way faster, since you just need to decrease a register value, but stack is limited in size and if your array is too large you'll end up with a Stack Overflow exception, which may lead to weird stuff happen like creating a wormhole dumping this entire site on your HDD :-) . Heap on the other hand is slower and too many allocation/deallocations may lead to fragment memory space.