C-строка как связанный список? - PullRequest
0 голосов
/ 23 февраля 2012

В c-строках нам нужно выделить разумный объем памяти.Чтобы избежать перераспределения в строковых операциях, мы можем использовать что-то вроде Stringbuilder в C # или Java или - в C - просто выделить больше памяти для строки.Но все же это может быть проблемой, если мы заранее не знаем требования к памяти.У нас есть какая-то реализация, такая как связанный список?Я хочу выделить список блоков памяти и метод c_str(), который создает c-строку из своих узлов

liststring a(4); // requested block size
a.append("hello ");
a.append("world");
// should create three nodes, 4 bytes allocated for each
// "hell" -> "o wo" -> "rld"
a.c_str(); // "hello world";

Или мы используем другой подход, если хотим избежать перераспределений?Пожалуйста, объясните, если это плохая идея.

Ответы [ 3 ]

3 голосов
/ 23 февраля 2012

См. Статью о Веревки для структуры данных, которая хранит строки как деревья. Это похоже на вашу идею.

0 голосов
/ 23 февраля 2012

Я предполагаю, что вы имели в виду C ++ , а не C .

Стандартный класс для работы со строками в C ++ - std :: string .

Строковые классы в Java или .NET являются неизменяемыми. std :: string , с другой стороны, является изменяемым, поэтому он ведет себя точно так же, как StringBuilder .

0 голосов
/ 23 февраля 2012

Стандартных способов сделать это не существует. Но вы можете реализовать свой собственный связанный список символов и преобразование в строку C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...