2017-02-20 47 views
0

Для сжатия данных мне нужно открыть файлы (здесь текстовые файлы) и сохранить их содержимое в переменных.String vs vector для хранения больших текстов

Лучше использовать строки или векторы символов для хранения действительно больших текстов (миллионы или более символов)?

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

Размер на самом деле не является проблемой здесь, так как и строка, и вектор могут хранить много символов, и я могу при необходимости разбить текст на несколько подтекстов.

+2

Фактическая производительность зависит от конкретной реализации на C++. В этом отношении нет существенных различий между строками и векторами. Оба контейнера с произвольным доступом обеспечивают сопоставимые возможности. Вы потратите больше времени, пытаясь понять это, тогда вы, возможно, захотите сэкономить, выбрав наиболее оптимальный контейнер. –

+1

На практике, скорее всего, нет никакой разницы. Оба типа обеспечивают форвардные итераторы, которые (обычно) реализованы как указатели. Единственное семантическое различие заключается в том, что читатели вашего кода с большей вероятностью ожидают, что символы 'NUL' встроены в управляемую последовательность для' vector'. Однако, поскольку вы имеете дело с текстовыми файлами, это не проблема. – IInspectable

+0

Ваше узкое место - это не контейнер в памяти, а файл ввода-вывода. Вы захотите использовать контейнер, который вы можете либо изменить размер *, либо установить емкость во время строительства. Перераспределение памяти при чтении из файла происходит очень медленно. –

ответ

3

Поскольку вектор и строковая производительность зависят от реализации, нет окончательного ответа. Я предлагаю вам проверить эти действия в своей среде и выбрать.

this - очень хорошая лекция о контроле вашего кода и о том, как даже стандарт не всегда может предложить правильные инструменты.

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

Если вы действительно заботитесь о производительности, всегда измеряйте себя.

1

Лучше использовать строки или векторы символов для хранения действительно больших текстов (миллионы или более символов)?

(здесь текстовые файлы)

std::string подходит для текстовых данных. В основном из-за соглашения, а также потому, что он предоставляет некоторые рудиментарные инструменты для обработки символьных строк, которых нет в std::vector.

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

По этим метрикам как строка, так и вектор сопоставимы и практически одинаковы, хотя точное исполнение является специфичным для реализации.

 Смежные вопросы

  • Нет связанных вопросов^_^