2015-06-29 4 views
0

Есть ли стандартный неизменяемый контейнер строк, который инкапсулирует char * и ничего больше? Использование будет состоять в том, чтобы хранить строки в векторах и использовать массивы символов как объекты.C++ неизменяемый контейнер строки

Причина, по которой я не хочу использовать std::string, является их накладными расходами.

+2

Почему вы думаете/знаете, что накладные расходы из std :: string являются проблемой? – MicroVirus

+6

Какие накладные расходы? Сохранение длины строки? Вам это нужно в любом случае (или «strlen» в O (n) все время). 64 дополнительных бит для сохранения емкости? О какой системе это проблема? –

+1

Если вы действительно хотите это сделать (и я не могу понять, почему вы бы это сделали), 'std :: unique_ptr ' - go орехи. – WhozCraig

ответ

4

«Причина, по которой я не хочу использовать std::string, - это их накладные расходы».

Предполагается, что std::string не имеет никаких накладных (если не доказать это в вашем вопросе) оно должно быть право выбора используется в качестве const std::string.

В качестве альтернативы вы можете выбрать const std::vector<char> для переменной размера или const std::array<char,<N>>для <N> фиксированного размера char массивов.

+0

Если 'string' не имеет накладных расходов, тогда' vector' тоже не будет. На самом деле это, вероятно, динамическое распределение, которое он хочет избежать (что разумно), и это позволяет только ваше последнее предложение. –

+0

@LightnessRacesinOrbit Ну, хорошая точка. Вот почему я упомянул об этом. –

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