Где почитать про структуры данных?
структура, которая хранит два указателя на область памяти где лежит строка: на её начало и конец.а какая у этой структуры мотивация?
Вот пример, что прям щас ищу и никак не найду в гугле: структура, которая хранит два указателя на область памяти где лежит строка: на её начало и конец.чем это отличается от стандартной структуры: строка, хранящая свою длину отдельным полем?
ну наверное резать строки без доп. выделений памяти.
а какая у этой структуры мотивация?эээ, такая же как у обычного std::string?
сишные строки char* не хранят длину строки, операции типа strlen(str) занимают много времени
хранить отдельно size_t len не удобно, такую пару фиг положишь в контейнер, а также фиг скормишь оператору
один из примеров когда это удобно:
const char* str = "Life is inevitable. Death is inevitable. Our choices remain inevitable.";
std::vector<MyString> tokens;
tokenize(str, '.', tokens);
std::cout << "Third sentence is: " << tokens[2] << std::endl;
так после деления строки ж будут не эквивалентны оригиналу
чем это отличается от стандартной структуры: строка, хранящая свою длину отдельным полем?эээ
1. там выделяется лишняя память
2. у нее тяжелое создание - делается strcpy
2. когда ту структуру будешь менять, оригинальная не изменится
какая у этой структуры мотивация?
чем это отличается от стандартной структуры: строка, хранящая свою длину отдельным полем?ребят
собстна я про это топик и завёл: ищу сайт где будет написано что хорошего в той или иной структуре
нэ понэл. Типа неизменяемые строки обычно внутри так и устраивают, чтобы можно было вырезать. Изменяемые тоже можно, но тяжелее: copy on write надо делать.
памяти выделяется столько же, сколько в твоем примере
> 2. у нее тяжелое создание - делается strcpy
можно делать копирование, можно не делать
> 2. когда ту структуру будешь менять, оригинальная не изменится
у структуры "строка с длиной" - всё тоже самое
я согласен про неизменяемую строку, но мы далеко в лес ушли
> 1. там выделяется лишняя памятья начинаю сомневаться что я тебя понимаю...
памяти выделяется столько же, сколько в твоем примере
> 2. у нее тяжелое создание - делается strcpy
можно делать копирование, можно не делать
> 2. когда ту структуру будешь менять, оригинальная не изменится
у структуры "строка с длиной" - всё тоже самое
"строка с длиной" - это ты так называешь std:string?
"строка с длиной" - это ты так называешь std:string?std:string один из вариантов сложной реализации структуры "строка с длиной".
под свои задачи можно сделать более простую реализацию.
std:string один из вариантов сложной реализации структуры "строка с длиной".дык я и сделал, нет разве?
под свои задачи можно сделать более простую реализацию.
я не понимаю что ты спрашиваешь...
Ты спрашиваешь единственный ли способ сделать то что я сделал?
Отвечаю: конечно же нет.
Ты спрашиваешь почему если способ не единственен я ожидаю что есть сайт с описанием именно моего способа?
Отвечаю: я не этого ожидаю. я ожидаю что есть сайт в котором описана хоть одна реализация стринга, не делающая strcpy как это делает std::string.
При этом "строка с длиной" в один один делает тоже самое, что и структура из начального поста.
ps
так же строка с длиной создает меньше возможностей для катастрофических ошибок, чем два указателя. Неверно переданная длина создает проблему много меньше, чем когда begin и end взяты от разных строк.
Я о том, что "строка с длиной" намного более изученный и обкатанный вариант.и?
При этом "строка с длиной" в один один делает тоже самое, что и структура из начального поста.
тема поста не "гляньте на мою реализацию MyString, скажите что с ней не так", а "подскажите на каком сайте почитать какой вариант более изученный и обкатанный"
спасибо тебе, что ты обратил внимание что предложенная мною реализация не является "изученным и обкатанным вариантом"
но я вот за несколько лет программирования впервые это услышал
я как всю жизнь использовал свой MyString, так бы и продолжал бы его использовать
мне бы никогда не пришло бы в голову что другой вариант считается более распространенным или более безопасным, или ...
и мне как-то не хочется ща начать и каждую свою структуру данных выкладывать на флокал спрашивая годится ли она
хочется "внегласно принятые стандарты" видеть на каком-то сайте
Вариант использования 1: Часто бывает что ищу структуру, а названия не знаю. Гугл нифига не помогает. Надеюсь на таком сайте быстро находить.максимум, что могу порекомендовать - просматривать буст (как доку, так и реализацию)
Вариант использования 2: Буду почитывать сайт для общего развития. Сколько лет программирую, а всё велосипеды выдумываю.
если ты встретишь аналог своего велика, то очень вероятно, что название из буста станет названием твоего велика и войдет в обиход
для текущего велика я не могу дать названия, однако похожий подход используется в boost:: asio ::buffer
успехов
std::pair<std::string::iterator, std::string::iterator>
Оставить комментарий
pitrik2
Посоветуйте какой-нибудь сайт, где можно почитать про разные структуры данных.Нужно именно не алгоритмы, а структуры.
Целевой язык с++, но наверное подойдёт любой похожий язык.
Идеально чтобы там было: название структуры, её описание, примеры где может использоваться, псевдо-код или даже с++ код, а также указание где она уже реализована: например в бусте, в с++11 или в gcc extensions.
Вариант использования 1: Часто бывает что ищу структуру, а названия не знаю. Гугл нифига не помогает. Надеюсь на таком сайте быстро находить.
Вариант использования 2: Буду почитывать сайт для общего развития. Сколько лет программирую, а всё велосипеды выдумываю.
Вот пример, что прям щас ищу и никак не найду в гугле: структура, которая хранит два указателя на область памяти где лежит строка: на её начало и конец.
что-то типа такого