Большую часть времени вы не собираетесь проверять. Поскольку вы уже проверили пользовательский ввод в тот момент, когда он входит в программу, вам не нужно проверять его где-либо еще.
Если есть вероятность использования неподтвержденного ввода, то вам следует использовать метод at (). Это создаст исключение, если индекс выходит за пределы и ведет себя как operator [] во всех других ситуациях. Исключение приведет к закрытию приложения, если вы явно не отловите и не дадите компенсацию (что следует делать только в том случае, если это допустимый параметр, в противном случае разрешите приложению завершиться (возможно, с сообщением об ошибке, если необходимо)).
Лично я предпочитаю использовать исключение вместо asserts ().
Утверждения могут быть отключены на уровне компилятора (поэтому они бесполезны в производственном коде (только для проверки кода действителен в модульных тестах)), исключения обеспечивают ту же функциональность (быстрое завершение работы приложения, если они запускаются (и как исключения, они позволяют вам регистрировать информацию)). В отличие от утверждений, исключения могут быть перехвачены при необходимости (хотя в основном вы просто хотите, чтобы они убили приложение)).