2012-04-05 3 views
0

Я буду читать и писать большие патроны большого двоичного файла.Манипуляция каплями в C++

Есть ли класс в стандартном C++ или наступающем стандартном C++ или новом стандартном C++ + boost, что упростит мою задачу?

Если бы не было возможности использовать класс строк для этого? Какова была бы опасность этого?

PS: Несколько наблюдений, которые прояснят вещи. Я ожидаю, что капли будут переданы по многим параметрам, поэтому контейнер, который подсчитывается по ссылке, и CoW, вероятно, будет предпочтительнее.

Также мое сопротивление использованию строкового класса двоякое: это капли, а не строки, «непечатаемые символы» и, в частности, нули могут вызвать трудности при их появлении.

+4

Существует - 'unsigned char *'. Что еще вам нужно от блоба? – alxx

+0

@JeremyFriesner Это не относится к 'std :: string'; это справедливо только в том случае, если вы вызываете 'c_str()' и явно рассматриваете его как строку C-стиля. –

+0

@JohnCalsbeek Я сижу исправлен, спасибо :) –

ответ

1

Если у вас есть куча двоичных данных, вы можете хранить это легко и эффективно в std::vector<unsigned char>.

Вы можете увеличить производительность, если знаете (или можете догадаться) размер капли, позвонив по номеру reserve.

И, наконец, если вы используете потоки, вы можете легко прочитать в вектор, используя std::back_inserter.

+0

«резерв», а не «обратный» – SigTerm

+0

@SigTerm: woops, fixed :) – orlp

0

В зависимости от того, что именно вы хотите сделать, файл с отображением памяти, such as the one from boost, вероятно, является хорошей отправной точкой. Для модификации в памяти используйте std :: vector, как предложили другие.

Не беспокойтесь о CoW - это в основном не одобряется в мире C++, за исключением, возможно, всего в Qt.

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