2016-12-15 1 views
1
vector<int> input = {1, 2, 3, 4, 17, 117, 517, 997}; 
cout<< "input vector at index -1 is: " << input[-1] <<endl; 

Используя выше код, то результат будет: вход с индексом -1: 0. Однако, если мы используем follwoing:Доступ отрицательный показатель вектора с помощью оператора [] и .at()

vector<int> input = {1, 2, 3, 4, 17, 117, 517, 997}; 
cout<< "input vector at index -1 is: " << input.at(-1) <<endl; 

В результате получилось бы: вход с индексом -1 is: libC++ abi.dylib: завершение с неперехваченным исключением типа std :: out_of_range: vector.

Может кто-нибудь объяснить мне причину? Спасибо.

ответ

7

Член at делает диапазон проверок и отвечает соответствующим образом.

operator [] нет. Это неопределенное поведение и ошибка в коде.

Это явно указано в документах.

+0

Не могли бы вы рассказать мне, что такое ошибка? Кажется, что для каждого входного вектора его индекс в -1 всегда равен 0, когда я использую оператор []. – Feng

+1

@FengZhou Это совпадение, что вы видите '0' в этой позиции. Это по-прежнему незаконное заявление. Вы смотрите вне содержимого вектора. Содержимое, на которое вы не можете смотреть, содержит '0'. –

+0

Спасибо. Да, это совпадение, я думаю. – Feng

2

Первое - это неопределенное поведение. Может произойти все, что угодно. Вы не можете жаловаться, что бы ни случилось.

Во-вторых, исключение выбрасывается, и вы его не поймаете, поэтому вызывается std::terminate() и ваша программа умирает. Конец.

Смежные вопросы