При правильном использовании STL обычно ноль служебных данных.Он так же эффективен, как и свернутый вручную код C, поэтому нет причин избегать его по соображениям производительности.
Однако если вам нужна функциональность, которой нет в STL, то да, вы, вероятно,лучше написать свой собственный, чем пытаться заставить класс STL сделать что-то, для чего он не предназначен.
есть много имен, ищущих в моем проекте, например,как "com.google.voice ....", если я использую std :: string, он должен быть нарезан снова и снова.Во-первых, головной узел "com" нарезается, если объект "com" был найден, другие имена "google.voice ...." следует искать в этом объекте рекурсивно.Есть ли лучшее решение, чтобы избежать повторения строки среза?
Я бы использовал итераторы.
Скажем, у вас есть строка s = "com.google.voice"
, затем просто определите итераторы, указывающие на началострока и разделитель между каждой подстрокой.Затем вместо создания совершенно новой строки для представления "com"
, вы просто используете два итератора, указывающие на начало и конец строки.
Boost.StringAlgo содержит множество общих строковых операций, реализованных для работына диапазонах итераторов.