Assuming your not using exceptions as some sort of signal-system, the difference is that vector::at() will ALWAYS throw an exception when you try to access an index out of bounds.
vector::operator[] might either return an undefined value OR throw an access violation exception (or crash).