Подтвердить что ты не робот

STL Rope - когда и где использовать

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

4b9b3361

Ответ 1

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

<сильные > Преимущества:

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

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

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

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

http://www.sgi.com/tech/stl/Rope.html

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

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

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

Это связано с тем, как веревка интерпретируется как данные. Как много меньших "строк", соединенных вместе через связанный список для создания финальной строки.