Здравствуйте, SleepyDrago, Вы писали:
SD>Самое смешное что rvalue references в VS2010 ускоряют этот ужас раз в 20. И такой код будет и дальше применяться не смотря на массовые расстрелы Недавно на блоге студии был пример ускорения как раз vector<vector<string>>
Ты за или против использования vector<vector<string>>?
Здравствуйте, igna, Вы писали:
I>Здравствуйте, SleepyDrago, Вы писали:
SD>>Самое смешное что rvalue references в VS2010 ускоряют этот ужас раз в 20. И такой код будет и дальше применяться не смотря на массовые расстрелы Недавно на блоге студии был пример ускорения как раз vector<vector<string>>
I>Ты за или против использования vector<vector<string>>?
Разумеется я против. Просто я признаю что есть софт, который этим пользуется тк у них нет требований по скорости и потребляемым ресурсам. И для тех кто пользуется подобными конструкциями в мс сообщали радостные новости http://blogs.msdn.com/vcblog/archive/2009/06/23/stl-performance.aspx
Здравствуйте, igna, Вы писали:
I>Здравствуйте, SleepyDrago, Вы писали:
SD>>Разумеется я против.
I>А если vector<vector<int> > вместо vector<vector<string> >, это меняет дело?
Нет ессно.
зы. Фрагментация памяти. Произвольный доступ. В общем это лучше писать на (подставьте сюда самое модное) чем на ++ если такие мягкие требования.
Здравствуйте, igna, Вы писали:
I>Здравствуйте, SleepyDrago, Вы писали:
I>>>А если vector<vector<int> > вместо vector<vector<string> >, это меняет дело? SD>>Нет ессно.
I>Так... А пример использования vector<vector<int> > у Страуструпа, на который я давал ссылку
I first show how to use the standard library vector class. Next, I present multidimensional arrays as they appear in C and C++ programs using only built-in facilities
?
Ну так тут ясно написано. Сначала для самых маленьких, кто не знает как пользоваться вектором. Потом только со встроенными средствами. Это же не рекомендованный способ решения, а всего лишь иллюстрация к стд библиотеке. Где вы здесь видите анализ временной сложности типичных операций или оценку требуемой памяти ? Попробуйте прикинуть — сразу поймете почему у тов. Шахтера и не только него совсем нет желания иметь с этим дело. Грамотное решение предложил zaufi и оно сводится к построению пары индексов над исходным текстом.
Удачи!
Здравствуйте, igna, Вы писали:
I>Возможно. А возможно, что это копирование по значению будет производится 1 раз при запуске программы, а косвенный доступ 1000000 раз.
Если вектора слов будут существовать только в рамках контейнера, можно попробовать такой вот финт:
SD>Ну так тут ясно написано. Сначала для самых маленьких, кто не знает как пользоваться вектором. Потом только со встроенными средствами.
Нда... Наверное если бы ты прочитал до конца, то заметил бы, что раздел про "встроенные средства" (C.7.2 Arrays) начинается словами "The built-in arrays are a major source of errors", а следующий за ним раздел про многомерные "встроенные средства" (C.7.3 Passing Multidimensional Arrays) заканчивается словами "The standard vector doesn't suffer from these problems".
Здравствуйте, igna, Вы писали:
I>Здравствуйте, Шахтер, Вы писали:
Ш>>stl::vector для решения этой задачи не подходит категорически. Потому что в него нельзя складывать объекты с тяжелым оператором копирования -- слишком накладно получается. А использовать дешевые move/swap он не позволяет по дизайну. А здесь два уровня -- исключительно неэффективное решение.
I>Ты бы все же посмотрел пример vector of vectors у Страуструпа. Можешь еще примечание на полях сделать, мол автор есть дилетант и предлагаемое им решение неэффективно.
Что дилетант не скажу, а что неэффективно -- скажу. И это не моё частное мнение, а объективная реальность, с которой нужно всё-таки считаться.
Здравствуйте, SleepyDrago, Вы писали:
SD>Здравствуйте, igna, Вы писали:
I>>Здравствуйте, SleepyDrago, Вы писали:
I>>>>А если vector<vector<int> > вместо vector<vector<string> >, это меняет дело? SD>>>Нет ессно.
I>>Так... А пример использования vector<vector<int> > у Страуструпа, на который я давал ссылку
SD>I first show how to use the standard library vector class. Next, I present multidimensional arrays as they appear in C and C++ programs using only built-in facilities
SD>? SD>Ну так тут ясно написано. Сначала для самых маленьких, кто не знает как пользоваться вектором. Потом только со встроенными средствами. Это же не рекомендованный способ решения, а всего лишь иллюстрация к стд библиотеке. Где вы здесь видите анализ временной сложности типичных операций или оценку требуемой памяти ? Попробуйте прикинуть — сразу поймете почему у тов. Шахтера и не только него совсем нет желания иметь с этим дело. Грамотное решение предложил zaufi и оно сводится к построению пары индексов над исходным текстом. SD>Удачи!
У меня был реальный случай. Пришел студент на практику. Я ему дал задание сделать FFT. Он написал код, после чего я попросил его замерить производительность и сравнить с прямой реализацией (с квадратичной сложностью). Быстрое преобразование на поверку оказалось медленнее медленной. Причина -- в бездумном использовании vector<vector<double> >. Собственно говоря, этот (и другие), случаи наглядно демонстрируют, что легкомысленное использование библиотек без ясного понимания их устройства легко приводит к неприемлимо неэффективным решениям. Всё-таки программироание начинается с умения писать циклы, оперировать указателями, правильно вызывать функции malloc/free и open/close и.т.п. базовым векщам.
Здравствуйте, Шахтер, Вы писали:
Ш>Что дилетант не скажу, а что неэффективно -- скажу.
Ну и зря ты так огульно. Если vector of vector используется правильно и к месту, никакой особой неэффективности по сравнению с массивами не будет. Возможно мой первый пример
подействовал на тебя как красная тряпка. Ну так я специально так написал — что вижу, то пою — чтобы узнать, удовлетворяет ли такое прямолинейное решение кого-нибудь и как пишут те, кого не удовлетворяет. Мое предпочтительное решение здесь
Здравствуйте, igna, Вы писали:
I>Здравствуйте, Шахтер, Вы писали:
Ш>>Что дилетант не скажу, а что неэффективно -- скажу.
I>Ну и зря ты так огульно. Если vector of vector используется правильно и к месту, никакой особой неэффективности по сравнению с массивами не будет. Возможно мой первый пример
подействовал на тебя как красная тряпка. Ну так я специально так написал — что вижу, то пою — чтобы узнать, удовлетворяет ли такое прямолинейное решение кого-нибудь и как пишут те, кого не удовлетворяет. Мое предпочтительное решение здесь
Здравствуйте, igna, Вы писали:
I>Здравствуйте, IROV.., Вы писали:
IRO>>Твое решение это теже яйца только с боку (красиво заэвулированое vvs)
I>Отнюдь нет. Если word_iterator::value_type — char const*, а sentence_iterator::value_type — Sentence const*, никаких лишних копирований не происходит.
ну да ты соптимизировал std::string но vv осталось
Что, что по структуре my_text это по сути тот же vector<vector<string> >? Да, но при заполнении его так, как я показал, не происходит ни одного лишнего копирования.
Здравствуйте, igna, Вы писали:
I>Что, что по структуре my_text это по сути тот же vector<vector<string> >? Да, но при заполнении его так, как я показал, не происходит ни одного лишнего копирования.
А ты знаешь что при конструирование вектора, двумя итераторами, находится distance, делается resize?
тоесть все тоже самое что я тебе написал.
на самом деле ты можешь просто сделать stl like proxy iterator для text->FirstSentence(); sent; sent = sent->Next()
Здравствуйте, igna, Вы писали:
I>Здравствуйте, IROV.., Вы писали:
IRO>>А ты знаешь что при конструирование вектора, двумя итераторами, находится distance, делается resize?
I>И что? Это же не приваивание, а конструктор. Лишних размещений нет.
ты просто написал stl-like proxy iterator для твоего intrusive list,