Re[5]: Заполняем vector<vector<string> >
От: igna Россия  
Дата: 13.08.09 04:08
Оценка:
Здравствуйте, SleepyDrago, Вы писали:

SD>Самое смешное что rvalue references в VS2010 ускоряют этот ужас раз в 20. И такой код будет и дальше применяться не смотря на массовые расстрелы Недавно на блоге студии был пример ускорения как раз vector<vector<string>>


Ты за или против использования vector<vector<string>>?
Re[6]: Заполняем vector<vector<string> >
От: SleepyDrago Украина  
Дата: 13.08.09 10:01
Оценка:
Здравствуйте, 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
Re[7]: Заполняем vector<vector<string> >
От: igna Россия  
Дата: 13.08.09 10:08
Оценка:
Здравствуйте, SleepyDrago, Вы писали:

SD>Разумеется я против.


А если vector<vector<int> > вместо vector<vector<string> >, это меняет дело?
Re[8]: Заполняем vector<vector<string> >
От: SleepyDrago Украина  
Дата: 13.08.09 10:14
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, SleepyDrago, Вы писали:


SD>>Разумеется я против.


I>А если vector<vector<int> > вместо vector<vector<string> >, это меняет дело?

Нет ессно.

зы. Фрагментация памяти. Произвольный доступ. В общем это лучше писать на (подставьте сюда самое модное) чем на ++ если такие мягкие требования.
Re[9]: Заполняем vector<vector<string> >
От: igna Россия  
Дата: 13.08.09 10:22
Оценка:
Здравствуйте, SleepyDrago, Вы писали:

I>>А если vector<vector<int> > вместо vector<vector<string> >, это меняет дело?

SD>Нет ессно.

Так... А пример использования vector<vector<int> > у Страуструпа, на который я давал ссылку
Автор: igna
Дата: 12.08.09
, видел?
Re[10]: Заполняем vector<vector<string> >
От: SleepyDrago Украина  
Дата: 13.08.09 10:48
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, SleepyDrago, Вы писали:


I>>>А если vector<vector<int> > вместо vector<vector<string> >, это меняет дело?

SD>>Нет ессно.

I>Так... А пример использования vector<vector<int> > у Страуструпа, на который я давал ссылку
Автор: igna
Дата: 12.08.09
, видел?

там где

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 и оно сводится к построению пары индексов над исходным текстом.
Удачи!
Re[3]: Заполняем vector<vector<string> >
От: sokel Россия  
Дата: 13.08.09 11:48
Оценка:
Здравствуйте, igna, Вы писали:

I>Возможно. А возможно, что это копирование по значению будет производится 1 раз при запуске программы, а косвенный доступ 1000000 раз.


Если вектора слов будут существовать только в рамках контейнера, можно попробовать такой вот финт:

// самопальный move_semantic :)
struct sentence : public vector<string> 
{
    sentence() {};
    sentence(const sentence& other) { swap(const_cast<sentence&>(other)); }
};
typedef vector<sentence> sentence_list;
Re[11]: Заполняем vector<vector<string> >
От: igna Россия  
Дата: 13.08.09 11:48
Оценка:
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".
Re[5]: Заполняем vector<vector<string> >
От: Шахтер Интернет  
Дата: 13.08.09 18:10
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, Шахтер, Вы писали:


Ш>>stl::vector для решения этой задачи не подходит категорически. Потому что в него нельзя складывать объекты с тяжелым оператором копирования -- слишком накладно получается. А использовать дешевые move/swap он не позволяет по дизайну. А здесь два уровня -- исключительно неэффективное решение.


I>Ты бы все же посмотрел пример vector of vectors у Страуструпа. Можешь еще примечание на полях сделать, мол автор есть дилетант и предлагаемое им решение неэффективно.


Что дилетант не скажу, а что неэффективно -- скажу. И это не моё частное мнение, а объективная реальность, с которой нужно всё-таки считаться.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[11]: Заполняем vector<vector<string> >
От: Шахтер Интернет  
Дата: 13.08.09 18:19
Оценка:
Здравствуйте, SleepyDrago, Вы писали:

SD>Здравствуйте, igna, Вы писали:


I>>Здравствуйте, SleepyDrago, Вы писали:


I>>>>А если vector<vector<int> > вместо vector<vector<string> >, это меняет дело?

SD>>>Нет ессно.

I>>Так... А пример использования vector<vector<int> > у Страуструпа, на который я давал ссылку
Автор: igna
Дата: 12.08.09
, видел?

SD>там где

SD>

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 и.т.п. базовым векщам.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[6]: Заполняем vector<vector<string> >
От: igna Россия  
Дата: 14.08.09 04:57
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Что дилетант не скажу, а что неэффективно -- скажу.


Ну и зря ты так огульно. Если vector of vector используется правильно и к месту, никакой особой неэффективности по сравнению с массивами не будет. Возможно мой первый пример
Автор: igna
Дата: 12.08.09
подействовал на тебя как красная тряпка. Ну так я специально так написал — что вижу, то пою — чтобы узнать, удовлетворяет ли такое прямолинейное решение кого-нибудь и как пишут те, кого не удовлетворяет. Мое предпочтительное решение здесь
Автор: igna
Дата: 12.08.09
.
Re[7]: Заполняем vector<vector<string> >
От: IROV..  
Дата: 14.08.09 07:44
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, Шахтер, Вы писали:


Ш>>Что дилетант не скажу, а что неэффективно -- скажу.


I>Ну и зря ты так огульно. Если vector of vector используется правильно и к месту, никакой особой неэффективности по сравнению с массивами не будет. Возможно мой первый пример
Автор: igna
Дата: 12.08.09
подействовал на тебя как красная тряпка. Ну так я специально так написал — что вижу, то пою — чтобы узнать, удовлетворяет ли такое прямолинейное решение кого-нибудь и как пишут те, кого не удовлетворяет. Мое предпочтительное решение здесь
Автор: igna
Дата: 12.08.09
.

Твое решение это теже яйца только с боку (красиво заэвулированое vvs)
я не волшебник, я только учусь!
Re[8]: Заполняем vector<vector<string> >
От: igna Россия  
Дата: 14.08.09 08:13
Оценка:
Здравствуйте, IROV.., Вы писали:

IRO>Твое решение это теже яйца только с боку (красиво заэвулированое vvs)


Отнюдь нет. Если word_iterator::value_typechar const*, а sentence_iterator::value_typeSentence const*, никаких лишних копирований не происходит.
Re[9]: Заполняем vector<vector<string> >
От: IROV..  
Дата: 14.08.09 08:23
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, IROV.., Вы писали:


IRO>>Твое решение это теже яйца только с боку (красиво заэвулированое vvs)


I>Отнюдь нет. Если word_iterator::value_typechar const*, а sentence_iterator::value_typeSentence const*, никаких лишних копирований не происходит.


ну да ты соптимизировал std::string но vv осталось
я не волшебник, я только учусь!
Re[10]: Заполняем vector<vector<string> >
От: igna Россия  
Дата: 14.08.09 08:36
Оценка:
Здравствуйте, IROV.., Вы писали:

IRO>ну да ты соптимизировал std::string но vv осталось


Так нет же. Обрати внимание на то, что sentence_iterator::value_type это Sentence const*, а не my_sentence.
Re[11]: Заполняем vector<vector<string> >
От: IROV..  
Дата: 14.08.09 11:11
Оценка:
Здравствуйте, igna, Вы писали:

I>Так нет же. Обрати внимание на то, что sentence_iterator::value_type это Sentence const*, а не my_sentence.

struct my_sentence : vector<string>
struct my_text : vector<my_sentence>

вот что я вижу.
я не волшебник, я только учусь!
Re[12]: Заполняем vector<vector<string> >
От: igna Россия  
Дата: 14.08.09 11:24
Оценка:
Здравствуйте, IROV.., Вы писали:

IRO>struct my_sentence : vector<string>
IRO>struct my_text : vector<my_sentence>

IRO> вот что я вижу.

Что, что по структуре my_text это по сути тот же vector<vector<string> >? Да, но при заполнении его так, как я показал, не происходит ни одного лишнего копирования.
Re[13]: Заполняем vector<vector<string> >
От: IROV..  
Дата: 14.08.09 13:13
Оценка:
Здравствуйте, igna, Вы писали:

I>Что, что по структуре my_text это по сути тот же vector<vector<string> >? Да, но при заполнении его так, как я показал, не происходит ни одного лишнего копирования.


А ты знаешь что при конструирование вектора, двумя итераторами, находится distance, делается resize?
тоесть все тоже самое что я тебе написал.

на самом деле ты можешь просто сделать stl like proxy iterator для
text->FirstSentence(); sent; sent = sent->Next()

я не волшебник, я только учусь!
Re[14]: Заполняем vector<vector<string> >
От: igna Россия  
Дата: 14.08.09 13:25
Оценка:
Здравствуйте, IROV.., Вы писали:

IRO>А ты знаешь что при конструирование вектора, двумя итераторами, находится distance, делается resize?


И что? Это же не приваивание, а конструктор. Лишних размещений нет.
Re[15]: Заполняем vector<vector<string> >
От: IROV..  
Дата: 14.08.09 13:58
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, IROV.., Вы писали:


IRO>>А ты знаешь что при конструирование вектора, двумя итераторами, находится distance, делается resize?


I>И что? Это же не приваивание, а конструктор. Лишних размещений нет.

ты просто написал stl-like proxy iterator для твоего intrusive list,

если развернуть то ты получишь тоже самое

get_size
resize
placement



еще можно поигратся развернув память vv -> v

vector<vector::iterator> text;
vector<char const *> worlds;

но при этом нужно знать специфику
я не волшебник, я только учусь!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.