Если вы ссылаетесь на std::string
, как описано здесь (определение: std::basic_string<char>
):
Если так, то как работает str.length () рассчитать длину? Если он вычисляется путем нахождения '\ 0', то, если я изменю любой символ между ними на '\ 0', можно ли уменьшить n?
Стандарт C ++ не предписывает детали реализации std::string
, только это поведение / интерфейс, но я думаю, что все реализации, как правило, выглядят следующим образом:
У вас есть класс, содержащий указатель на соответствующую память, необходимую для вашей строки, и 2 целых числа. Целые числа хранят фактическую длину вашей строки и размер выделенной памяти. Поэтому, когда вы звоните str.length()
, он просто ищет сохраненный номер в постоянном времени. Так что нет расчета. Поэтому вы также не можете изменить его размер, вставив \0
. Фактически, сохраняя размер явно, вам совсем не нужен \0
.
Могу ли я изменить его length () любым методом? Есть ли способ уменьшить результат str.length ()?
Существует специальный метод c resize
. Однако вы также можете использовать несколько других методов для изменения его длины, например, insert
, append
, clear
и некоторые другие. Просто посмотрите на связанную документацию. Сам класс заботится о распределении памяти для хранения результата этих операций. Вы также можете получить размер основной памяти с помощью метода capacity
. Если вы примените некоторые операции к вашей строке, вы заметите, что значение, возвращаемое capacity
, может быть равно length
, но оно также может быть и выше. Если вы уменьшите длину вашей строки, большинство реализаций не будет перераспределять основную память.