C++ делает begin/end/rbegin/rend, выполняются в постоянное время для станд.:: набор, станд.:: карта, и т.д.?

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, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

5
задан Doug T. 17 September 2008 в 14:09
поделиться

6 ответов

Они происходят в постоянное время. Я смотрю на страницу 466 стандарта ISO/IEC 14882:2003:

Таблица 65 - контейнерный Requiments

a.begin (); (постоянная сложность)

a.end (); (постоянная сложность)

Таблица 66 - обратимые контейнерные требования

a.rbegin (); (постоянная сложность)

a.rend (); (постоянная сложность)

8
ответ дан 18 December 2019 в 07:58
поделиться

Да, согласно http://www.cplusplus.com/reference/stl/, начните (), конец () и т.д. весь O (1).

5
ответ дан 18 December 2019 в 07:58
поделиться

В стандарте C++ Таблице 65 в 23,1 (Контейнерные Требования) списки начинаются () и конец () как требование постоянного времени. Если Ваша реализация нарушает это, она не соответствует.

4
ответ дан 18 December 2019 в 07:58
поделиться

Только посмотрите на код, здесь Вы видите итераторы в станд.:: карта в GNU libstdc ++

std::map

Вы будете видеть, что весь конец разрывает cend... все реализованы в постоянное время.

2
ответ дан 18 December 2019 в 07:58
поделиться

Будьте осторожны с hash_map все же. начните (), не является постоянным.

1
ответ дан 18 December 2019 в 07:58
поделиться

Для станд.:: набор

начните: постоянный, конец: постоянный, rbegin: постоянный, разорвите: постоянный,

Для станд.:: карта

они являются также постоянными (все они)

если у Вас есть сомнение, просто проверьте www.cplusplus.com

0
ответ дан 18 December 2019 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: