NullPointerException
s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException
. Они наиболее распространены, но другие способы перечислены на странице NullPointerException
javadoc.
Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException
, be:
public class Example {
public static void main(String[] args) {
Object obj = null;
obj.hashCode();
}
}
В первой строке внутри main
я явно устанавливаю ссылку Object
obj
равной null
. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException
, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.
(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
Они происходят в постоянное время. Я смотрю на страницу 466 стандарта ISO/IEC 14882:2003:
Таблица 65 - контейнерный Requiments
a.begin (); (постоянная сложность)
a.end (); (постоянная сложность)
Таблица 66 - обратимые контейнерные требования
a.rbegin (); (постоянная сложность)
a.rend (); (постоянная сложность)
Да, согласно http://www.cplusplus.com/reference/stl/, начните (), конец () и т.д. весь O (1).
В стандарте C++ Таблице 65 в 23,1 (Контейнерные Требования) списки начинаются () и конец () как требование постоянного времени. Если Ваша реализация нарушает это, она не соответствует.
Только посмотрите на код, здесь Вы видите итераторы в станд.:: карта в GNU libstdc ++
Вы будете видеть, что весь конец разрывает cend... все реализованы в постоянное время.
Будьте осторожны с hash_map все же. начните (), не является постоянным.
Для станд.:: набор
начните: постоянный, конец: постоянный, rbegin: постоянный, разорвите: постоянный,
Для станд.:: карта
они являются также постоянными (все они)
если у Вас есть сомнение, просто проверьте www.cplusplus.com