The std::vector implementation of [] is not bounds-checked whereas at() is bounds-checked and throws an exception if out of bounds. Thus the later is safer but potentially slower.
Review our usage as I'm not sure we have been consistent or thoughtful of this
Perform some benchmarking tests to see if the use of the bounds-checked version is a significant real world problem for us (maybe it is if we use TTValue in perform loops).
The std::vector implementation of [] is not bounds-checked whereas at() is bounds-checked and throws an exception if out of bounds. Thus the later is safer but potentially slower.