2012-05-09 2 views
4

Я имею дело с гигантскими (до 2 ГБ) строк и их срезами в программе на С ++. Строки в стиле C кажутся ненадежными при таких обстоятельствах, но могут быть разрезаны тривиально (без «\ 0» в конце). С другой стороны, как я понял, std :: string :: substr копирует срез, поэтому я должен выполнить хотя бы одну дополнительную операцию добавления (индекс + база) для индексации, чтобы рациональное использование памяти.Как управлять струнными срезами с меньшими накладными расходами?

+0

До сих пор это не вопрос. Кроме этого, вы не можете делать (чтение) нарезки с помощью итераторов? – moooeeeep

+0

Я ищу способ отрезать std :: string эффективно или подтвердить, что это нереально. – leventov

+0

Что такое _unreal_ string? – RedX

ответ

8

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

+0

И решите, какую семантику вы хотите для срезов: являются ли символы в разрезе мозаикой? Если это так, нужно модифицировать срез, чтобы изменить полную строку? Если вы изменяете, но не разделяете, вам нужна копия-на-запись, что лишняя тонна удовольствия, если вы не можете выкопать какую-то старую COW-реализацию 'std :: string' и использовать ее (переименованную). –

+0

К счастью, мои строки доступны только для чтения. – leventov

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