v[i] と違い v.at(i) は境界チェックをするため、範囲外だと例外を投げて安全に停止します。
出るコード
#include <vector>
int main() {
std::vector<int> v = {1, 2, 3};
return v.at(10); // 範囲外
}
エラーメッセージ
terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check: __n (which is 10) >= this->size() (which is 3)
直し方
v.size() で長さを確認してからアクセスするか、try〜catch (const std::out_of_range&) で例外を捕まえて処理します。