Что происходит, когда сравниваются два списка целых чисел? [Дубликат]

Зачем нам нужны виртуальные методы в C ++?

Быстрый ответ:

  1. Он предоставляет нам один из необходимых «ингредиентов», 1 для объектно-ориентированного программирования .

В Bjarne Stroustrup C ++ Programming: Principles and Practice, (14.3):

Виртуальная функция предоставляет возможность определять функцию в базовом классе и имеют функцию с тем же именем и типом в производном классе, вызываемом, когда пользователь вызывает функцию базового класса. Это часто называют полиморфизмом во время выполнения , динамической отправки или диспетчером времени выполнения , поскольку вызванная функция определяется во время выполнения на основе тип используемого объекта.

  1. Это самая быстрая более эффективная реализация, если вам нужен вызов виртуальной функции 2.

Для обработки виртуального вызова требуется одна или несколько частей данных, относящихся к производному объекту 3. Обычно обычно делается так, чтобы добавить адрес таблицы функций , Эта таблица обычно называется виртуальной таблицей виртуальной таблицы или виртуальной функции , а ее адрес часто называют виртуальным указателем . Каждая виртуальная функция получает слот в виртуальной таблице. В зависимости от типа объекта вызывающего (производного), виртуальная функция, в свою очередь, вызывает соответствующее переопределение.


1. Использование наследования, полиморфизма во время выполнения и инкапсуляции является наиболее распространенным определением объектно-ориентированного программирования .

2. Вы не можете использовать функциональность кода быстрее или использовать меньшую память, используя другие языковые функции, чтобы выбирать среди альтернатив во время выполнения. Bjarne Stroustrup C ++ Programming: Принципы и практика. (14.3.1).

3. Что-то сказать, какая функция действительно вызывается, когда мы вызываем базовый класс, содержащий виртуальную функцию.

19
задан Timmy O'Mahony 24 October 2012 в 16:51
поделиться

2 ответа

Из Сравнение последовательностей и других типов в учебнике Python:

Сравнение использует лексикографическое упорядочение: сначала сравниваются первые два элемента, и если они отличаются друг от друга определяет результат сравнения; если они равны, сравниваются следующие два элемента и так далее, пока не будет исчерпана любая последовательность.

См. также статью Википедии о лексикографическом порядке .

32
ответ дан aggieNick02 25 August 2018 в 22:10
поделиться

Поскольку я не нашел объяснения сравнения списка / кортежа, используя, в первую очередь, «лексикографическое упорядочение», в первую очередь, это попытка объяснить это «своими словами». Во-первых, вот несколько примеров списков, которые упоминаются в объяснении ниже:

a = [1, 2, 3]
b = [1, 2, 10]
c = [1, 2, 3, 100]
d = [1, 2, 3]
e = [1, 2, 3, 4, 'a']
f = ['a', 'b', 'c']

Пара элементов в каждом индексе сравнивается по очереди. Таким образом, сравнение a с b приведет к сравнению 1, 2, сравниваемого с 2, а 3 сравнивается с 10.

] Сравнение пар остановится, когда либо обнаружена неравная пара элементов , либо - если списки имеют разную длину - достигнут конец более короткого списка.

Например, при сравнении a и b сравнения будут останавливаться, когда сравниваются 3 и 10. При сравнении b и c сравнения останавливаются, когда сравниваются 10 и 3.

Как только найдена неравная пара, общий результат является результатом сравнения неравных Предметы. Это относится к тому, являются ли списки одинаковой длины или нет - например, список b больше, чем список c, потому что 100 в c никогда не входит в игру.

Например , при сравнении a с b общий результат будет результатом сравнения 3 с 10. a < b -> True, потому что 3 меньше 10. a > b -> False, потому что 3 не больше 10. a == b -> False, поскольку 3 не равно 10.

Если один из списков короче и его N элементов равны первым N элементам более длинного списка, как в случае a и c, более короткий список будет считаться меньшим, чем более длинный список (поэтому a меньше c).

Два списка будут сравниваться как равные только , если они имеют одинаковую длину, и все пары элементов сравниваются как равные.

Примечание о типах: если элементы в паре не сопоставимы, сравнение будет неудачно с TypeError, как обычно. Например, сравнение списка a с f не будет выполнено, если 1 сравнивается с 'a'. Но также обратите внимание, что списки d и e можно сравнить, поскольку 'a' в e никогда не сравнивается ни с чем в d.

2
ответ дан user 25 August 2018 в 22:10
поделиться
Другие вопросы по тегам:

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