Escape pipe-character in org-mode

ПредC++ 11 ответов

Вы корректны, который стандарт не говорит что сложность списка:: размер () должен быть - однако, он действительно рекомендует, чтобы он "имел постоянную сложность" (Примечание A в Таблице 65).

Вот интересная статья Howard Hinnant , который объясняет, почему некоторые люди думают список:: размер () должен иметь O (N) сложность (в основном, потому что они полагают что O (1) список:: размер () входит в список:: соединение встык () имеет O (N) сложность), и почему O (1) список:: размер () быть хорошей идеей (по мнению автора):

я думаю, что основные моменты в газете:

  • существует немного ситуаций, где поддержание внутреннего количества так list::size() может быть O (1) причины операция соединения встык для становления линейным
  • существует, вероятно, намного больше ситуаций, где кто-то мог бы не знать об отрицательных эффектах, которые могли бы произойти, потому что они называют O (N) size() (такой как его один пример, где list::size() назван при содержании блокировки).
  • , что вместо того, чтобы разрешить size() быть O (N), в интересах 'наименьшего количества удивления', стандарт должен потребовать любого контейнера, который реализует size() для реализации его в O (1) вид. Если контейнер не может сделать этого, он не должен реализовывать size() вообще. В этом случае пользователь контейнера будет проинформирован, что size() недоступно, и если они все еще хотят или должны получить число элементов в контейнере, они могут все еще использовать container::distance( begin(), end()) для получения того значения - но они будут абсолютно знать, что это - O (N) операция.

я думаю, что я склонен соглашаться с большей частью его обоснования. Однако мне не нравится его предложенное дополнение к эти splice() перегрузки. Необходимость передать в n, который должен быть равен [1 110] для получения корректного поведения, походит на рецепт для трудно для диагностирования ошибок.

я не уверен, что должно или могло быть сделано, продвинувшись, поскольку любое изменение окажет значительное влияние на существующий код. Но как есть, я думаю, что на существующий код уже влияют - поведение могло бы довольно существенно отличаться от одной реализации до другого для чего-то, что должно было быть четко определено. Возможно, комментарий onebyone о кэшировании и маркировке размера, известного/неизвестного, мог бы работать хорошо - Вы амортизируетесь O (1) поведение - единственное время, Вы получаете O (N), поведение состоит в том, когда список изменяется некоторым соединением встык () операции. Хорошая вещь об этом состоит в том, что это может быть сделано конструкторами сегодня без изменения в стандарте (если я не пропускаю что-то).

, Насколько я знаю, C++ 0x ничего не изменяет в этой области.

30
задан Brian Tompsett - 汤莱恩 18 November 2017 в 12:01
поделиться

1 ответ

Используйте символ с разбитой чертой, «¦», Unicode 00A6 BROKEN BAR. Это может или не может работать для ваших конкретных потребностей, но это хорошее визуальное приближение.

2
ответ дан 28 November 2019 в 00:20
поделиться
Другие вопросы по тегам:

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