Quote from the << C++ prime>>:
"""
int *p = &ia[2]; // ia[] is a int-type array, it contains 5 elements.
int j = p[1];
int k = p[-2];
This last example points out an imiportant difference between arrays and library types such as vector and string that have subscript operators. The library types force the index used with a subscript to be an unsigned value. The built-in subscript operator does not. The index used with the built-in subscript operator can be a negative value. Of course, the resulting address must point to an element in (or one past the end of ) the array to which the original pointer points.
"""
The paragraph stress the difference of subscript-operator for different types.. the index used with the built-in subscript operator can't be a negative value for vector and string.
Warning:
Unlike subscripts for vector and string, the index of the built-in subscript operator is not an unsigned type.