Many of the containers allow subscripting;
the list does not. A list is a linear linked structure
intended to be scanned, not accessed randomly. The
array, vector and map can all be subscripted.
Subscripting can be performed with square brackets or the at()}
method. Either can appear on either side of an assignment.
Subscripting with square brackets,
av[i]:
- An out-of-bounds array array or vector reference using brackets is
unchecked and dangerous. No exception is thrown. Instead, the operation
is completed (in error) at some location outside the structure.
- Subscripting a map with a non-existent key is fine. The key is simply
added to the map.
Subscripting with
av.at(i):
- An out-of-bounds array array or vector reference
is detected and throws a
std::out_of_range exception.
- Subscripting a map with a non-existent key also throws a
std::out_of_range exception. (Which doesn't really make sense,
since keys don't belong to a range.)
For arrays and vectors, the at method provides bounds-checking.
For maps, the usefulness of at simply follows from the details of
the application: which behavior of subscripting helps.