STL Rope - когда и где использовать - PullRequest
30 голосов
/ 13 мая 2010

Мне было интересно, при каких обстоятельствах вы будете использовать веревку поверх другого контейнера STL?

Ответы [ 5 ]

39 голосов
/ 13 мая 2010

Канаты - это масштабируемая строка реализация: они предназначены для эффективная операция, которая включает в себя строка в целом. Операции, такие как назначение, объединение и подстрока занимает время, которое почти не зависит от длины строка. В отличие от струн C, веревки являются разумное представление для очень длинные строки, такие как буферы редактирования или почтовые сообщения.

Преимущества

  1. Гораздо быстрее конкатенация и операции с подстрокой, включающие длинные строки. Вставка символа в середина 10-мегабайтной веревки должна взять на себя порядка 10 с микросекунды, даже если копия оригинал хранится, например как часть редактировать историю. В отличие от этого взять порядка секунды для обычная "плоская" струна представление. Время, необходимое для конкатенация может рассматриваться как постоянный для большинства приложений. это вполне разумно использовать веревку как представление файла внутри текстовый редактор.

  2. Потенциально намного лучшее пространство спектакль. Незначительные модификации веревка может делиться памятью с оригинал. Веревки выделяются небольшими куски, значительно уменьшающие память проблемы фрагментации, представленные большие блоки

  3. Назначение просто (возможно ссылка на счет) указатель назначения. В отличие от подсчета ссылок при копировании при записи реализации, это остается в значительной степени истина, даже если одна из копий впоследствии слегка доработанный. это очень недорого, чтобы проверить старый версии строки, например в редактировании история.

  4. Можно просмотреть функцию производить персонажей как веревку. Таким образом, кусок веревки может быть 100MByte файл, который читается только тогда, когда раздел строки рассматривается. Конкатенация строки до конца такой файл не требует чтения файл. (В настоящее время реализация этого объекта неполный.)

https://wayback.archive.org/web/20130102093702/https://www.sgi.com/tech/stl/Rope.html

7 голосов
/ 13 мая 2010

Это нестандартная альтернатива string, которая обрабатывает большие объемы данных. См. здесь о том, как это работает.

3 голосов
/ 24 марта 2011

Единственная плохая вещь с веревками - это нитки и неправильное использование.

В Linux (и, возможно, в большинстве других операционных систем) говорится, что код безопасности потоков делает веревки намного медленнее. Так что я просто копирую этот код (установите def для компилятора на thread-off ), потому что я использую один поток во встроенной платформе.

В противном случае веревки намного быстрее строк, имеют меньшую вероятность выхода из памяти на больших буферах и намного быстрее для редактирования больших буферов; Например, удаление плохого персонажа в середине Библии.

Это связано с тем, как веревка интерпретируется как данные. Как множество маленьких маленьких «строк», соединенных вместе через связанный список для получения окончательной строки.

2 голосов
/ 04 мая 2016

Здесь большое внимание уделяется строкам, состоящим из символов, но веревка - это просто одномерная последовательность с быстрыми вставками и удалениями (в любом месте последовательности).

Кажется немного удивительным, что такая базовая возможность редко требуется для чего-либо (кроме строк). Где бы я использовал целую веревку? Я не знаю, потому что для манипулирования им нужны индексы откуда-то.

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

2 голосов
/ 13 мая 2010

Я бы не стал использовать его вообще, но это потому, что я немного урод "легкой переносимости" и склонен использовать только стандартные трясины. Веревка является частью реализации SGI STL и не является частью стандарта C ++.

...